题解 P5269 【欧稳欧再次学车】
Hemingway
2019-05-19 15:17:24
提交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]分的就别发题解了~~