天天看點

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

作者: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

Data

樣例2說明

該位置記錄經過了高危區域,但最多隻有連續兩個時刻位于其中,不滿足逗留條件。

評測用例規模與約定

全部的測試點滿足 ,,所有坐标均為整數且絕對值不超過 。

CCF 202009-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;
}