注意:此题涉及周期问题。
假设出发时,第二个路口是红灯,还剩10秒。第一段路耗时200秒,这200秒内,第二个路口的红绿灯已经经历了若干给循环,所以这200秒不是到达路口的实际情况。要除去每个循环后,剩下的时间才是到达此路口的真是情况。
# csp认证真题 201812-2 小明放学(python)总结
r,y,g = map(int,input().split())
n = int(input())
lis = list([i for i in map(int,input().split())]for j in range(n))
time = 0 #总时间
T = r+y+g #红灯+黄灯+绿灯,算出一个周期的时间
for k_t in lis:
k = k_t[0] # k 为 此时路口的情况
t = k_t[1] # t 为 此时还剩多少时间
ti = time%T # ti 为 总时间除去每个周期后所剩余的时间,此时才是路口的真实情况
if k == 0: #经过道路
time += t
if k == 1: # 红灯时
if ti < t: # 红灯,还没到绿灯
time += t-ti
elif ti <= g+t: # 绿灯,没到黄灯
continue
elif ti > g+t: # 比绿灯时间还长
time += T+t-ti
if k == 2: # 黄灯时
if ti <= t: # 比黄灯时间小
time += t - ti + r
elif ti <= r+t: # 时间在剩余黄灯 和 红灯之间
time += t+r-ti
elif ti <= r+g+t: # 绿灯
continue
else: # 比绿灯大,到了黄灯了
time += T+t+r-ti
if k == 3: #绿灯时
if ti > t and ti<T-g+t: # 比绿灯时间长
time += y+r+t-ti
else :
continue
print(time)