这道题完全败在不能理解题意上..
另外还有就是逻辑思维.
①如果当前改变车速,我们要对比从出发到现在所有的限速标志,如果超速则+1.一直遍历到第一个不超速就停止。这个很重要,因为
这个逻辑自己想想,不管前面如何,限速是向“后”看的,不管以前的。
②加上新的限速标记,要对比当前车速,如果超了则+1.没超才加入栈当中,不然会重复记录。
③不能超车要累积,并且遇到可以超车,则累计的全部变为0
第一点是最重要的,不能完全遍历。只遍历到有问题位置
#include<bits/stdc++.h>
#define N 200010
using namespace std;
int main() {
int n,i,tp[N],speed=0,maxspd=999999,ret=0,cnt=0;
stack <int> sp;
bool flag=0;//flag chaoche flag1 huansu
//freopen("in.txt","r",stdin);
cin>>n;
for(i=1; i<=n; i++) {
scanf("%d",&tp[i]);
if(tp[i]==1) {
scanf("%d",&speed);
while(sp.empty()==0&&speed>sp.top())
{ret++;sp.pop();
}
}
else if(tp[i]==2) {
ret+=cnt;
cnt=0;
} else if(tp[i]==3) {
scanf("%d",&maxspd);
if(maxspd<speed) {
ret++;//cout<<ret;
} else {
sp.push(maxspd);
}
} else if(tp[i]==4) {
cnt=0;
} else if(tp[i]==5)
{maxspd=999999;
while(sp.empty()==0)
sp.pop();
}
else if(tp[i]==6) {
cnt++;
}
}
cout<<ret;
}
codefcodeforces 845D Driving Test
最新推荐文章于 2019-03-22 14:16:59 发布