一、题目
二、解题
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)。它只使用了几个常量大小的变量来存储输入值和计数器,因此空间复杂度与输入规模无关。
总之,这个程序在时间和空间方面都非常高效。
已收到消息.