题解 P5269 【欧稳欧再次学车】

Hemingway

2019-05-19 15:17:24

Solution

提交2次AC 该题为一道典型的~~阅读理解~~纯模拟题 先放第一个代码(70分) ```cpp #include<algorithm> #include<iostream> #include<cstdio> using namespace std; int t,n,l,r,x,k,xi[1000010],yi[1000010],d=1,dr,tmp=0; long long ans; int main() { cin>>t>>n>>l>>r>>x>>k; for(int i=0;i<t;i++) cin>>xi[i]>>yi[i]; dr=l; for(int i=0;i<t;i++) { if(xi[i]==0)d++,dr=l; else if(xi[i]==1)d--,dr=r; if(yi[i]==1)dr=min(dr+x,r); if(dr==r) { tmp++; if(tmp>=k) break; } else tmp=0; if(d>n||d<1) { cout<<-1; return 0; } ans+=(long long)dr*d; } cout<<ans; return 0; } ``` 连第2个样例都没过。理由: 1.这 K 秒结束的一瞬间停下 2.在每秒开头的一瞬间进行的,其中换挡操作比踩油门操作先进行。而这一秒内这辆车前进的距离是 转速×挡位(原文) 调整顺序后: ```cpp #include<algorithm> #include<iostream> #include<cstdio> using namespace std; long long ans,t,n,l,r,x,k,xi[1000010],yi[1000010],d=1,dr,tmp;//d即档,dr转速,tmp即转速连续为r的时间 int main() { cin>>t>>n>>l>>r>>x>>k; for(int i=0;i<t;i++) cin>>xi[i]>>yi[i]; dr=l; for(int i=0;i<t;i++) { if(xi[i]==0)d++,dr=l;//降档 else if(xi[i]==1)d--,dr=r;//升档 //x=2,不操作 if(d>n||d<1) { cout<<-1;//序列不合法 return 0; } if(yi[i]==1)dr=min(dr+x,r);//踩油门 if(dr==r)tmp++; else tmp=0; ans+=(long long)dr*d; if(tmp>=k)break;//发动机宕机 } cout<<ans; return 0; } ``` ~~像我这种语文月考[Censored]分的就别发题解了~~