版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lidengdengter/article/details/87926545
简单题,判断即可
#include<cstdio>
typedef long long ll;
int main(){
int r,y,g,n,k,t;
scanf("%d %d %d",&r,&y,&g);
scanf("%d",&n);
ll sum=0;
for(int i=0;i<n;i++){
scanf("%d %d",&k,&t);
if(k==0) sum+=t;
if(k==3) continue;
if(k==1)
sum+=t;
if(k==2)
sum+=(t+r);
}
printf("%lld\n",sum);
return 0;
}
循环判断,因为n较大,每次模除总的红绿黄灯时间,再判断即可,详见代码
#include<cstdio>
typedef long long ll;
int l[5];
int main(){
scanf("%d %d %d",&l[1],&l[2],&l[3]);
int tmp=l[1]+l[2]+l[3];
int n,k,t;
ll ans=0,sum;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d %d",&k,&t);
if(k==0) ans+=t;
else{
sum=ans%tmp;
t-=sum;
while(t<0){
k=(k+2)%3;
if(k==0) k=3;
t+=l[k];
//k%=3;
}
if(k==2)//变成黄灯
ans+=(t+l[1]);
if(k==1)//变成红灯
ans+=t;
}
}
printf("%lld\n",ans);
return 0;
}