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

一道大模拟。不开long long见祖宗
根据题目意思模拟各种操作即可。

题目意思解释:

欧稳欧在每秒也可以踩油门,让转速增加X,再对R取min。

意思就是说,如果转速超过\(X\),那么转速变为\(R\)当时想这个意思想了半天

\(Code:\)

#pragma GCC diagnostic error "-std=c++11"
#include <iostream>
#include <cstdio>
using namespace std;
template<class T>void r(T &a)//快读
{
    T s=0,w=1;a=0;char ch=getc(stdin);
    while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getc(stdin);}
    while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getc(stdin);}
    a=w*s;
}
template<class T,class... Y>void r(T& t,Y&... a){r(t);r(a...);}
int main()
{
    //不开long long见祖宗!
    long long T,N,L,R,X,K,zs,dw=1/*挡位初始化为1*/,ans=0,pd=0;
    r(T,N,L,R,X,K);
    zs=L;//转速初始化为L
    for(int i=1;i<=T;i++)
    {
        int x,y;
        r(x,y);
        if(x==0)//x=0的情况
        {
            if(dw==N)//判断是否是不合法操作
            {
                printf("-1\n");
                return 0;
            }
            dw++;//挡位+1
            zs=L;//修改转速
        }
        else if(x==1)//x=1的情况
        {
            if(dw==1)//判断是否是不合法操作
            {
                printf("-1\n");
                return 0;
            }
            dw--;//挡位-1
            zs=R;//修改转速
        }
        if(y==1)zs=min(zs+X,R);//y=1的情况,需要修改转速
        ans+=zs*dw;//增加前进的距离
        if(zs==R)pd++;//用来存储转速连续等于R的时间
        else pd=0;
        if(pd==K)break;//如果转速连续等于R的时间为K,发动机停止工作
    }
    printf("%lld\n",ans);//输出答案
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Naive-Cat/p/10664256.html