CCF 202009-2 風險人群篩查 滿分程式碼

icoi_y發表於2020-11-23
作者:its_ycm 
來源:CSDN 
原文:https://blog.csdn.net/its_ycm/article/details/109993618 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

試題編號: 202009-2
試題名稱: 風險人群篩查
時間限制: 1.0s
記憶體限制: 256.0MB
問題描述:
題目背景
某地疫情爆發後,出於“應檢盡檢”的原則,我們想要通知所有近期經過該高危區域的居民參與核酸檢測。

問題描述
想要找出經過高危區域的居民,分析位置記錄是一種簡單有效的方法。

具體來說,一位居民的位置記錄包含 個平面座標 ,其中 表示該居民 時刻所在位置。
高危區域則可以抽象為一個矩形區域(含邊界),左下角和右上角的座標分別為 和 ,滿足 且 。

考慮某位居民的位置記錄,如果其中某個座標位於矩形內(含邊界),則說明該居民經過高危區域;進一步地,如果其中連續 個或更多座標均位於矩形內(含邊界),則認為該居民曾在高危區域逗留。需要注意的是,判定經過和逗留時我們只關心位置記錄中的 個座標,而無需考慮該居民在 到 時刻之間位於何處。

給定高危區域的範圍和 位居民過去 個時刻的位置記錄,試統計其中經過高危區域的人數和曾在高危區域逗留的人數。

輸入格式
輸入共 行。

第一行包含用空格分隔的七個整數 、、、、、 和 ,含義如上文所述。

接下來 行,每行包含用空格分隔的 個整數,按順序表示一位居民過去 個時刻的位置記錄 。

輸出格式
輸出共兩行,每行一個整數,分別表示經過高危區域的人數和曾在高危區域逗留的人數。

樣例輸入1
5 2 6 20 40 100 80
100 80 100 80 100 80 100 80 100 80 100 80
60 50 60 46 60 42 60 38 60 34 60 30
10 60 14 62 18 66 22 74 26 86 30 100
90 31 94 35 98 39 102 43 106 47 110 51
0 20 4 20 8 20 12 20 16 20 20 20
Data
樣例輸出1
3
2
Data
樣例1說明
如下圖紅色標記所示,前三條位置記錄經過了高危區域;
但第三條位置記錄(圖中左上曲線)只有一個時刻位於高危區域內,不滿足逗留條件。

p2.png

樣例輸入2
1 3 8 0 0 10 10
-1 -1 0 0 0 0 -1 -1 0 0 -1 -1 0 0 0 0
Data
樣例輸出2
1
0
Data
樣例2說明
該位置記錄經過了高危區域,但最多隻有連續兩個時刻位於其中,不滿足逗留條件。

評測用例規模與約定
全部的測試點滿足 ,,所有座標均為整數且絕對值不超過 。

在這裡插入圖片描述
保持冷靜分析題目!!!

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n,k,t,xl,yd,xr,yu;
	cin>>n>>k>>t>>xl>>yd>>xr>>yu;
	int x,y,h,r1,r2,a=0,b=0;
	for(int i=0;i<n;++i)
	{
		r1=0,r2=0;
		h=0;//!!!!!!!!!!! 
		for(int j=0;j<t;++j)
		{
			cin >> x >> y;
			if(xl<=x&&x<=xr&&yd<=y&&y<=yu)
			{
				h++;
				r1=1;
				if(h>=k)
					r2=1;					
			}	
			else
				h=0;
			
			if(j==t-1)///記得加花括號!! 
			{
				if(r1)
					a++;
				if(r2)
					b++;
			}	
		}
	}
	cout << a << endl << b << endl;
	return 0;
}

相關文章