把红绿黄信号灯看做一个如图的循环
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <sstream>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <queue>
#include <iomanip>
#include <stack>
using namespace std;
int r,y,g;
int n;
int main()
{
long long prealltime,local;//local表示位于哪一个信号灯段
int i,j,k,t;
while(cin >>r >> y>>g)
{
cin>>n;
prealltime=0;
for(i = 1;i <=n;++i)
{
cin >> k>> t;
if(k==0)
{
prealltime+=t;
}
else
{
if(k==1)
local=r-t;
else if(k==2)
local=g+y+r-t;
else
local=r+g-t;
local+=prealltime;
local%=(r+g+y);
if(local<r)
prealltime+=r-local;
else if(local<r+g)
prealltime+=0;
else
prealltime+=r+g+y-local+r;
}
}
cout<<prealltime<<endl;
}
return 0;
}