题目
分析
注意两点:
- 某个人可能在风险区内逗留之后,出了风险区,之后再次进入风险区逗留
- 边界问题,注意每个变量可能的取值范围。
代码
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int all[30][3000];//i记录x,2i记录y,0记录是否该时刻的点是否在风险区内,若不在为0,在为1;
int lu[1010] = { 0 };
int main()
{
int n, k, t, xl, yd, xr, yu;
int alllu = 0,dou = 0;
scanf_s("%d %d %d %d %d %d %d", &n, &k, &t, &xl, &yd, &xr, &yu);
for (int i = 1;i <= n;i++)
{
all[i][0] = 0;
for (int p = 1;p <= 2*t;p++)
{
scanf_s("%d %d", &all[i][p], &all[i][p + 1]);
if (all[i][p] >= xl && all[i][p] <= xr && all[i][p + 1] >= yd && all[i][p + 1] <= yu)
{
all[i][0]++;
lu[(p + 1) / 2]++;
}
p++;
}
if (all[i][0]) alllu++;
int tag = 0, temp;
for (int h = 1;h <= t;h++)
{
temp = h;
tag = 0;
while (lu[h])
{
h++;
}
tag = h - temp;
if (tag >= k)
{
dou++;
break;
}
}
for (int i = 1;i <= 1010;i++) lu[i] = 0;
}
printf("%d\n%d\n", alllu, dou);
}
运行结果: