csp风险人群筛查 c++满分实现

思路:主要思路就是要遍历每个点,判断其是否在风险区内,另外注意如果是逗留则必须要连续多点才可以,不能累加

1.首先,从输入中读取 n、k、t、x1、y1、x2、y2 等变量的值。这些变量表示了一些区域的坐标范围以及相关参数。
2.接下来,使用两个数组 A 和 flag 来存储计数和标记信息。数组 A 用于记录每个人在给定的时间段内待在区域内的次数,数组 flag 用于标记满足连续逗留条件的人。
3.接着,使用两层嵌套的循环,外层循环遍历每个人,内层循环遍历每个人在时间段内的位置。
4.在内层循环中,通过 fun 函数判断当前位置是否在给定的区域范围内。如果不在范围内,将计数器 cnt 重置为 0,表示逗留被打断。如果在范围内,将计数器 cnt 加 1,并更新数组 A、flag 的值。
5.循环结束后,通过两个变量 sum1 和 sum2 来统计满足条件的人数。sum1 统计当过至少一次范围内的人数(数组 A 中大于 0 的元素个数),sum2 统计满足连续逗留条件的人数(数组 flag 中值为 1 的元素个数)。
6.最后,输出 sum1 和 sum2 的值,表示满足条件的人数。

#include<iostream>
using namespace std;
int n,k,t,x1,y1,x2,y2;
int A[22];
int flag[22];
int fun(int temp1,int temp2){
	if(temp1<=x2&&temp1>=x1){
		if(temp2<=y2&&temp2>=y1){
			return 1;
		}
	}
	return 0;
}
int main(){
	cin>>n>>k>>t>>x1>>y1>>x2>>y2;
	for(int i=0;i<n;i++){
		int cnt=0; //注意要是看逗留需要连续在,那么在这个人除用一个变量来计数, 开始变量为0,只要在范围内,变量就加1,如果不在范围内变量就变为0,但是要注意,要先判断在不在,不在就先变为0 
		for(int j=0;j<t;j++){
			int temp1,temp2;
			cin>>temp1>>temp2;
			if(fun(temp1,temp2)==0){
				cnt=0;
			}
			else if(fun(temp1,temp2)==1){
				A[i]++;
				cnt++;
				if(cnt>=k){
					flag[i]=1;
				}			
			}
		}
	}
	
	int sum1=0;//在这里除了会覆盖,不然都要加初值 
	int sum2=0;
	for(int i=0;i<n;i++){
if(A[i]>0){
sum1++;

}
	if(flag[i]==1){
		sum2++;
	}	
	}
	cout<<sum1<<endl;
	cout<<sum2;
	
	return 0;
}

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值