题目
感想
emmmm这是所有第二题中里面我最不想写的一题,就是理不清思路,大概知道怎么算,但是就是理不清逻辑,以至于无法下手。本来都想放弃了,想着反正不会考原题,但是,抱着刷完的想法,看了别人的代码,还是敲完了。
因为是借鉴别人的,所以这里放上原文链接。
# 输入
r,y,g=map(int,input().split()) #r1,y2,g3 红黄绿灯
n=int(input())
line=[]
for i in range(n):
f,t=map(int,input().split())
line.append([f,t])
tol=0
# 计算回家的时间
for l in line:
f,t=l[0],l[1]
k=tol%(r+y+g)
if f==0: # 走路耗时
tol+=t
elif f==1: # 初始为红灯
if t>=k: #当此时所用的时间还不到红绿灯所指示的时间
tol=tol+(t-k)
elif g<=abs(t-k)<y+g: #到达时为黄灯
tol=tol+(y+g-abs(t-k))+r
elif y+g<=abs(t-k)<y+g+r: #到达时为红灯
tol=tol+(r+y+g-abs(t-k))
elif 0<=abs(t-k)<g: #到达时为绿灯
continue
elif f==2: #初始为黄灯
if t>k: #当此时所用的时间还不到红绿灯所指示的时间
tol=tol+(t-k)+r
elif 0<=abs(t-k)<r: #到达时为红灯
tol=tol+(r-abs(t-k))
elif r<=abs(t-k)<r+g: #到达时为绿灯
continue
elif r+g<=abs(t-k)<r+g+y: #到达时为黄灯
tol=tol+(r+g+y-abs(t-k))+r
elif f==3: #初始为绿灯
if t>k: #当此时所用的时间还不到红绿灯所指示的时间
continue
elif 0<=abs(t-k)<y: #到达时为黄灯
tol=tol+(y-abs(t-k))+r
elif y<=abs(t-k)<y+r: #到达时为红灯
tol=tol+(y+r-abs(t-k))
elif y+r<=-abs(t-k)<y+r+g: #到达时为绿灯
continue
# 输出
print(tol)