思路如下:
60
# include <iostream>
using namespace std;
int r,y,g;
int n;
int k,t;
long long time;
void cal_k1(int t) {
if(time<=t)time+=(t-time);
else {
int T=(time-t)%(r+y+g);
int para=(time-t)/(r+y+g);
if(T>=g /*&& T<(g+y+r)*/)time+=((r+y+g)*(para+1)-(time-t));
}
}
void cal_k2(int t) {
if(time-t<r)time+=(r-(time-t));
else {
int T=(time-t)%(r+y+g);
int para=(time-t)/(r+y+g);
if(T>=r+g)time+=((r+y+g)*(para+1)+r-(time-t));
}
}
void cal_k3(int t) {
if(time-t>=0) {
int T=(time-t)%(r+y+g);
int para=(time-t)/(r+y+g);
if(T<y+r)time+=((r+y+g)*para+y+r-(time-t));
}
}
int main(void) {
cin>>r>>y>>g>>n;
for(int i=1; i<=n; i++) {
cin>>k>>t;
if(k==0)time+=t;
else if(k==1)cal_k1(t);
else if(k==2)cal_k2(t);
else if(k==3)cal_k3(t);
}
cout<<time<<endl;
return 0;
}
100
# include <iostream>
using namespace std;
int r,y,g;
int n;
int k,t;
long long time;
void cal_k1(int t) {
if(time<=t)time+=(t-time);
else {
int T=(time-t)%(r+y+g);
if(T>=g)time+=(r+y+g-T);
}
}
void cal_k2(int t) {
if(time-t<r)time+=(r-(time-t));
else {
int T=(time-t)%(r+y+g);
if(T>=r+g)time+=(r+y+g+r-T);
else if(T<r)time+=(r-T);
}
}
void cal_k3(int t) {
if(time-t>=0) {
int T=(time-t)%(r+y+g);
if(T<y+r)time+=(y+r-T);
}
}
int main(void) {
cin>>r>>y>>g>>n;
for(int i=1; i<=n; i++) {
cin>>k>>t;
if(k==0)time+=t;
else if(k==1)cal_k1(t);
else if(k==2)cal_k2(t);
else if(k==3)cal_k3(t);
}
cout<<time<<endl;
return 0;
}