整体思路比较容易,不过有个坑坑了我半天,就是一个人可能会两次逗留在高危区域。。
#include<iostream>
#include<math.h>
#include<algorithm>
#include<string.h>
using namespace std;
pair<int,int>p[1005];
int main(){
int n,k,t,xl,yd,xr,yu;
int passby=0,stay=0;
cin>>n>>k>>t>>xl>>yd>>xr>>yu;
for(int i=0;i<n;i++){ //n个人
memset(p,0,sizeof(p));
for(int j=0;j<t;j++){ //t个时刻的位置坐标点
cin>>p[j].first;
cin>>p[j].second;
}
int iin = 0; //连续在高危区域内的点
bool passflag = false; //判断是否已经在经过的人群里了,第一次是false
bool stayflag = false; //判断是否已经在逗留的人群里了,第一次是false
for(int m=0;m<t;m++){ // t个时刻
if(p[m].first<=xr && p[m].first>=xl && p[m].second>=yd && p[m].second<=yu){
if(!passflag){
passby++;
passflag = true;
}
iin++;
if(iin == k && !stayflag){ //连续 k 个时刻
stay++;
stayflag = true;
}
}//打断连续性
else{
iin = 0;
}
}
}
cout<<passby<<endl;
cout<<stay;
}