该题算是比较简单的题目,对于每一位市民来说,我们遍历他经过的t个点,如果当前所在点处于高危区域中,那么临时变量(定义为连续在高危区域的点数)计数++,反之清零,然后每次都判断是否该临时变量>=k,定义两个标识变量判断是否是经过高危区域与是否是逗留在高危区域即可
#include<iostream> using namespace std; int n,k,t,xl,yl,xr,yr;//n个居民,>=k则逗留,t个点,高危区域左下角与右上角 int ans1,ans2; typedef struct Node{ int x,y; }Node; Node arr[25][1005]; bool in(Node node){ int x=node.x,y=node.y; return (x<=xr&&y<=yr)&&(x>=xl&&y>=yl); } int main(){ int n; cin>>n>>k>>t>>xl>>yl>>xr>>yr; for(int i=1;i<=n;i++){ for(int j=1;j<=t;j++){ cin>>arr[i][j].x>>arr[i][j].y; } int temp=0;//连续处于高危区域的点数 bool flag1=0,flag2=0;//是否经过高危区域与是否逗留在高危区域 for(int j=1;j<=t;j++){//遍历i居民经历的t个点 if(in(arr[i][j])){//当前j点处于高危区域 temp++; flag1=1;//判定为经过高危区域 }else{ temp=0;//清零 } if(temp>=k){ flag2=1;//判定为逗留在高危区域 break;//此时无需在遍历 } } if(flag1)ans1++;//计数 if(flag2)ans2++; } cout<<ans1<<endl; cout<<ans2<<endl; return 0; }