845D - Driving Test
竟然做法和题解一样~~~贪心
其实当时没想着能过,虽然并不是很难~
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int inf=1e9; 4 const int maxn=2e5+10; 5 int n; 6 stack<int> s; 7 8 int main(){ 9 scanf("%d",&n); 10 int ans=0; 11 int v=0,lim=inf,past=0; //初始速度为0,不限速(lim==inf),可超车(past==0为可超) 12 13 int id,val; 14 scanf("%d%d",&id,&val); 15 v=val; 16 s.push(inf); 17 for(int i=1;i<n;i++){ 18 scanf("%d",&id); 19 if(id==1||id==3) scanf("%d",&val); 20 if(id==1){ //变速 21 while(val>lim){ //如果车速超过限制,就要无视限制 22 if(!s.empty()){ 23 s.pop(); 24 ans++; 25 lim=s.top(); 26 } 27 } 28 v=val; 29 } 30 if(id==2){ //超车 31 if(past){ //如果不可超车,就无视掉 32 ans+=past; 33 past=0; 34 } 35 } 36 if(id==3){ //限速val 37 if(v>val){ //当前车速就大于val,直接无视限制 38 ans++; 39 }else{ //否则把限速存到栈里 40 s.push(val); 41 lim=val; 42 } 43 } 44 if(id==4){ //允许超车 45 past=0; 46 } 47 if(id==5){ //不限速 48 while(!s.empty()) s.pop(); 49 s.push(inf); 50 lim=inf; 51 } 52 if(id==6){ //不许超车 53 past++; 54 } 55 } 56 printf("%d\n",ans); 57 }
时间: 2024-10-05 04:33:34