简单判断,细心一点就好了。
对于每个灯,判断一下在当前时间下是什么颜色。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const double epos=1e-8;
ll r,y,g;
int id;
ll x;
int main(){
int n;
scanf("%lld%lld%lld",&r,&y,&g);
scanf("%d",&n);
ll res=0;
while(n--){
scanf("%d%lld",&id,&x);
if(!id) res+=x;
else if(id==1){
if(x>=res) res+=x-res;
else{
ll t=res-x;
t%=(r+y+g);
if(t>=g) res+=y+r-(t-g);
}
}
else if(id==2){
if(x>=res) res+=x-res+r;
else{
ll t=res-x;
t%=(r+y+g);
if(t<r) res+=r-t;
else if(t>=r+g) res+=y-(t-r-g)+r;
}
}
else{
if(x<res){
ll t=res-x;
t%=(r+y+g);
if(t<y) res+=y-t+r;
else if(t>=y&&t<r+y) res+=r-(t-y);
}
}
}
printf("%lld\n",res);
return 0;
}