风险人群筛查 202009-2 C++


一、题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

原题目链接

二、解题

1.题目

这个程序解决了一个计数问题。它读取一些输入值,包括n、k、t、xl、yd、xr和yu。其中,n表示人数,k表示逗留的最短时间片,t表示每个人的时间片数量,xl、yd、xr和yu定义了一个矩形风险区域。

程序中有两个循环。外层循环遍历每个人,内层循环遍历每个人的时间片。对于每个时间片,程序读取该人在该时间片的位置,并判断该位置是否在风险区域内。如果在风险区域内,则增加连续在风险区域内的时间片计数器countK;否则将countK重置为0。

程序还记录了每个人连续在风险区域内的最大时间片maxCountK。如果maxCountK大于0,则说明该人经过了风险区域;如果maxCountK大于等于k,则说明该人在风险区域逗留。

最后,程序输出经过风险区域的人数和在风险区域逗留的人数。

2.代码

dev c++ 5.11

#include<iostream>
using namespace std;

int main(){
	int n,k,t,xl,yd,xr,yu;
	cin>>n>>k>>t>>xl>>yd>>xr>>yu;
	int pass = 0, stop = 0;//通过的个数 逗留的个数
	for(int i=0,x,y;i<n;++i){//循环这n个人
		int countK = 0,maxCountK = 0;//当前连续在风险区域的时间片个数countK  连续最高时间片maxCountK 
		for(int j=0;j<t;++j){//循环这个人的t个时间片
			cin>>x>>y;
			countK = (x<xl||x>xr||y<yd||y>yu)?0:(countK+1);//如果TA在当前时间片j在风险区域中则自增countK否则置countK=0
			if(countK>maxCountK) maxCountK = countK;//更新连续最高时间片
		}
		if(maxCountK>0){//经过
			++pass;
		}
		if(maxCountK>=k){//逗留
			++stop;
			continue;
		}
	}
	cout<<pass<<endl<<stop;
	return 0;
}




3.提交结果

在这里插入图片描述

总结

1.解释

这个程序的时间复杂度为O(n*t),其中n表示人数,t表示每个人的时间片数量。因为程序中有两个嵌套循环,外层循环遍历每个人,内层循环遍历每个人的时间片。

这个程序的空间复杂度为O(1)。它只使用了几个常量大小的变量来存储输入值和计数器,因此空间复杂度与输入规模无关。

总之,这个程序在时间和空间方面都非常高效。

已收到消息.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值