codefcodeforces 845D Driving Test

这道题完全败在不能理解题意上..另外还有就是逻辑思维.①如果当前改变车速,我们要对比从出发到现在所有的限速标志,如果超速则+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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值