CSP-202009-2-风险人群筛查
解题思路
- 主循环(对每个查询):
- 使用一个布尔变量
pass
来标记风险人群是否至少一次进入了特定区域,以及一个布尔变量onlyOnce
来确保停留计数stayNum
在每次查询中最多只增加一次。 - 内循环(对每个时间段):程序读取风险人群在每个时间段的位置,并判断它是否在特定区域内。
- 如果风险人群在特定区域内,
pass
设置为true
,stay
递增。 - 如果风险人群离开特定区域且
stay
大于等于k
,则stayNum
增加(如果之前没有增加过),并将onlyOnce
设置为false
,防止再次增加;然后重置stay
为0。
- 如果风险人群在特定区域内,
- 检查循环结束后的状态:如果动物至少一次进入特定区域,
passNum
增加。如果风险人群最后停留时间大于等于k
且之前未增加过stayNum
,则stayNum
也增加。
- 使用一个布尔变量
完整代码
#include <iostream>
using namespace std;
int n, k, t, X1, Y1, X2, Y2, x, y, passNum, stayNum;
int main() {
cin >> n >> k >> t >> X1 >> Y1 >> X2 >> Y2;
for (int i = 0; i < n; i++)
{
bool pass = false, onlyOnce = true;
int stay = 0;
for (int i = 0; i < t; i++)
{
cin >> x >> y;
if (X1 <= x && x <= X2 && Y1 <= y && y <= Y2)
{
pass = true;
stay++;
}
else {
if (stay >= k && onlyOnce) stayNum++, onlyOnce = false;
stay = 0;
}
}
if (pass) passNum++;
if (stay >= k && onlyOnce) stayNum++;
}
cout << passNum << endl << stayNum;
return 0;
}