CCF CSP 202009-2 風險人群篩查
202009-2 風險人群篩查
題目背景
某地疫情爆發後,出於“應檢盡檢”的原則,我們想要通知所有近期經過改高危區域的居民參與核酸檢測。
問題描述
想要找出經過高危區域的居民,分析位置記錄時一種簡單有效的方法。具體來說,一位居民的位置記錄包含t個平面座標(\(x_1,y_1\)),(\(x_2,y_2\)),...,(\(x_t,y_t\))表示該居民i時刻所在位置。高危區域則可以抽象為一個矩形區域(含邊界),左下角和右上角的座標分別為(\(x_l,y_d\))和(\(x_r,y_u\)),滿足\(x_l\lt x_r\)且\(y_d\lt y_u\)。考慮某位居民的位置記錄,如果其中某個座標位於矩形內(含邊界),則說明該居民經過高危區域;進一步地,如果其中連續
輸入格式
輸入共n+1行。
第一行包含空格分隔的七個整數\(n,k,t,x_l,y_d,x_r,y_u\),含義如上文所述。
接下來n行,每行包含用空格分隔的2t個整數,按順序表示一位居民過去t個時刻的位置記錄\((x_1,y_1),(x_2,y_2),...,(x_t,y_t)\)。
輸出格式
輸出共兩行,每行一個整數,分別表示經過高危區域的人數和曾在高危區域逗留的人數。
樣例輸入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 106 47 110 51
0 20 4 20 8 20 12 20 16 20 20 20
樣例輸出1
3
2
樣例輸入2
1 3 8 0 0 10 10
-1 -1 0 0 0 0 -1 -1 0 0 -1 -1 0 0 0 0
樣例輸出2
1
0
樣例2說明
該位置記錄經過了高危區域,但最多隻有兩個連續兩個時刻位於其中,不滿足逗留條件。
評測用例規模與約定
全部測試點滿足\(1\le n \le20\)
程式碼
#include<cstdio>
int main(){
int n,k,t,xl,yd,xr,yu;
scanf("%d%d%d%d%d%d%d",&n,&k,&t,&xl,&yd,&xr,&yu);
int i,xi,yi,j,ans1=0,ans2=0;
int cnt[20]={0};
for(i=0;i<n;i++){
bool flag = false;
int temp = 0;
for(j=0;j < t;j++)
{
scanf("%d%d", &xi, &yi);
if((xi>=xl&&xi<=xr)&&(yi>=yd&&yi<=yu)){
cnt[i]++;
temp++;
if (cnt[i] >= k){
flag = true;
}
}else{
cnt[i]=0;
}
}
if(flag){
ans2++;
}
if(temp){
ans1++;
}
}
printf("%d\n%d",ans1,ans2);
return 0;
}