一道大模拟。不开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;
}