CSP202009-2 风险人群筛查

CSP202009-2 风险人群筛查

题目

题目可以在CSP官网中查看哟!

算法分析

这道题难度不是很大,算是一个较为简单的小模拟题吧。题目大致意思就是:有一个疫情高危区域,输入n个人的t个移动位置坐标,判断这个人会不会出现在高危区域,如果出现并连续在高危区域出现了超过k个时刻,则判定这个人经过高危区域,并停留了;如果这个人只是出现在高危区域,但并没有连续出现k个区域,则判定这个人只是经过了高危区域。
我们只需要遍历n个人,再依次遍历每一个人的t个时刻的位置,用一个计数器时刻记录这个人连续出现在高危区域的时刻数,依据这个计数器,即可实现对这个人的判定。代码如下。
结果截图

完整代码

#include<iostream>
#include<cstdio>
#include<vector>
#pragma warning (disable:4996)
using namespace std;
int n, k, t, xl, yd, xr, yu;
struct Person
{
	vector<int> x;
	vector<int> y;
}person[100];
int main()
{
	freopen("in.in", "r", stdin);
	freopen("out.out", "w", stdout);
	int i, j;
	cin >> n >> k >> t >> xl >> yd >> xr >> yu;   //输入
	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= t; j++)   //输入一个人的t个时刻的坐标
		{
			int x, y;
			cin >> x >> y;
			person[i].x.push_back(x);
			person[i].y.push_back(y);
		}
	}
	int num_through = 0;   //记录经过高危区域的人数
	int num_stay = 0;	   //记录经在高危区域停留的人数
	for (i = 1; i <= n; i++)
	{
		int flag_through = 0;
		int flag_stay = 0;
		int num_continue = 0;   //记录该人连续出现在高危区域的时刻数
		for (j = 0; j < t; j++)
		{
			//判断是否出现在高危区域
			if (person[i].x[j] >= xl && person[i].x[j] <= xr && person[i].y[j] >= yd && person[i].y[j] <= yu)
				num_continue++;
			else
				num_continue = 0;
			if (num_continue > 0) flag_through = 1;
			if (num_continue >= k) flag_stay = 1;
		}
		if (flag_through == 1 && flag_stay == 1)
		{
			num_stay++;
			num_through++;
		}
		else if (flag_through == 1 && flag_stay == 0) num_through++;
	}
	cout << num_through << endl;
	cout << num_stay;
	return 0;
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值