此问题非常简单,只需要注意 “逗留” 人数的要求为 “连续” 即可。
#include <bits/stdc++.h>
using namespace std;
unsigned int flag[25], ans1, ans2; // 标记和结果
int main()
{
int n, k, t, xl, yd, xr, yu;
cin>>n>>k>>t>>xl>>yd>>xr>>yu;
for(int i=0; i<n; ++i)
{
bool con = false; // 判断连续
unsigned int tmp=0; // 暂存器
for(int u=0; u<t; ++u) // 处理每个人
{
int x,y;
cin>>x>>y;
if(x>=xl&&x<=xr&&y>=yd&&y<=yu) // 判断是不是在毒圈内,同时处理圈内时长
{
if(!con)
con=true;
tmp++;
}
else if(con)
{
con=false; // 出圈
flag[i]=max(flag[i], tmp); // 取最大逗留时长存储
tmp=0; // 初始化
}
}
flag[i]=max(flag[i], tmp); // 假如某个人一直在圈内,则需要再处理
if(flag[i]>0)
ans1++; // 统计经过人数
if(flag[i]>=k)
ans2++; // 统计逗留人数
}
cout<<ans1<<endl<<ans2; // 输出结果
return 0;
}