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;
}
