一、小明放学(续)
1.思路
根据上面的图可以划分不同的情况,每种灯都有4种情况,具体情况看代码。
2.源代码
r,y,g = map(int,input().split())
time_all = r + y + g
n = int(input())
res = 0
for i in range(n):
k,t = map(int,input().split())
if k == 0:
res += t
elif k ==1:
if res%time_all <= t: #灯情况未变,仍然是红灯。
res += t-res%time_all
elif t < res%time_all <= t + g: #变成了绿灯。
continue
elif t + g < res%time_all <= t + y + g: #变成了黄灯
res += r + (t + y + g - res%time_all)
else: #变到了红灯,只不过是t时间前的红灯。
res += r - (res%time_all - t - g - y)
elif k == 2:
if res%time_all <= t: #灯情况未变,仍然是黄灯。
res += r + t - res%time_all
elif t < res%time_all <= r + t: #变成了红灯。
res += r + t - res%time_allc
elif r + t < res%time_all <= t + r + g: #变成了绿灯
continue
else: #变到了黄灯,只不过是t时间前的黄灯。
res += r + y -(res%time_all - t - r - g)
elif k == 3:
if res%time_all <= t: #灯情况未变,仍然是绿灯。
continue
elif t < res%time_all <= t + y: #变成了黄灯。
res += y + t - res%time_all + r
elif t + y < res%time_all <= t + y + r: #变成了红灯
res += r - (res%time_all - t -y )
else: #变到了绿灯,只不过是t时间前的绿灯。
continue
print(res)
总结
本题难点是划分各种情况,因为给你的时间是离出发后的时间,所以你得判断当你到达时这个灯是什么颜色。