题目链接:http://118.190.20.162/view.page?gpid=T112
题目解答:
因为在这次这次代码中,我使用到了bool类型,其实也完全不需要,但是正好想到了就用一下,就当复习以下。
第一次解答
第一次解答,我自己感觉为啥问题(我也没找出问题),样例也是对的,但是系统测试就是0,也没超时也没超内存。
如果有大佬看见了希望可以解答一下,不胜感激
#include <iostream>
using namespace std;
struct people{
int x[1000];
int y[1000];
};
//只要逗留了,就一定经过
int main(){
int n;//n位居民,n组数据
int k;//连续 k个点在里面就算是逗留了
int t;//一共t个时刻
int xl,yd,xr,yu;//高危区域坐标
cin>>n>>k>>t>>xl>>yd>>xr>>yu;
int pass=0;//经过的人数
int stay=0;//逗留的人数
people peo[n];//n组数据
int i,j;//用于循环的变量
bool sub[t];
int temp=0;//用于和k进行比较
for(i=0;i<n;i++){
//第一个都要进行提前判断
cin>>peo[i].x[0]>>peo[i].y[0];
if(peo[i].x[0]<xr+1&&peo[i].x[0]>xl-1&&peo[i].y[0]<yu+1&&peo[i].y[0]>yd-1){
temp++;
sub[0]=1;//1在高风险区域
}
else{
sub[0]=0;//不在
}
//开始后面的
for(j=1;j<t;j++){
cin>>peo[i].x[j]>>peo[i].y[j];
if(peo[i].x[j]<xr+1&&peo[i].x[j]>xl-1&&peo[i].y[j]<yu+1&&peo[i].y[j]>yd-1) {
if(sub[j-1]==1) temp++; //前一个也在
else temp=1;//前一个不在 ,当前就是第一个
sub[j]=1;
}
else {//当前如果不在这个区域里面
sub[j]=0;
}
}//这个居民的这一波完成了,开始判断他的情况
if(temp>k-1) stay++;
if(temp>0) pass++;
temp=0;//然后开始下一个又全部清零
}
cout<<pass<<endl<<stay;
return 0;
}
这是我可怜的测试结果
第二次解答
我参照了一下网上的一些大佬的写法。yysy他们真的又简洁又易懂,这就是差距吗。爱了爱了,然后我转化成自己的理解写了新的一个版本