The Unknown Way

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

提交2次AC

该题为一道典型的阅读理解纯模拟题

先放第一个代码(70分)

#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.在每秒开头的一瞬间进行的,其中换挡操作比踩油门操作先进行。而这一秒内这辆车前进的距离是 转速×挡位(原文)

调整顺序后:

#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]分的就别发题解了


2019-05-19 15:17:24 in 题解