【CSP试题回顾】202009-2-风险人群筛查

CSP-202009-2-风险人群筛查

解题思路

  • 主循环(对每个查询)
    • 使用一个布尔变量pass来标记风险人群是否至少一次进入了特定区域,以及一个布尔变量onlyOnce确保停留计数 stayNum 在每次查询中最多只增加一次
    • 内循环(对每个时间段):程序读取风险人群在每个时间段的位置,并判断它是否在特定区域内。
      • 如果风险人群在特定区域内,pass设置为truestay递增。
      • 如果风险人群离开特定区域且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;
}

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值