201812-1 小明上学
1. 题目介绍
- 本题网址:http://118.190.20.162/view.page?gpid=T81
- 本题截图:
2. Python代码
# 输入的第一行包含空格分隔的三个正整数 r、y、g,表示红绿灯的设置。这三个数均不超过 106。
rl, yl, gl = map(int, input("").split(' '))
sum3 = rl + yl + gl
# 输入的第二行包含一个正整数 n(n ≤ 100),表示小明总共经过的道路段数和看到的红绿灯数目
n = int(input(""))
# 接下来的 n 行,每行包含空格分隔的两个整数 k、t。k=0 表示经过了一段道路,耗时 t 秒,此处 t 不超过 106;
time = 0
def r_t(t):
r_t = rl - t # 为红灯时等待时间
return r_t
def y_t(t):
y_t = yl - t + rl # 为黄灯时要等待时间
return y_t
g_t = 0 # 为绿灯时等待时间
for i in range(n):
k, t = map(int, input().split(' '))
if k == 0:
t = t
else:
if t <= time:
t = (time - t) % sum3 # 经过周期后的还要走ts
if k == 1: # 当为红灯时
if t > gl + yl: # 此时为红灯
t = t - (yl + gl)
t = r_t(t)
elif gl <= t <= gl + yl: # 此时为黄灯
t = t - gl
t = y_t(t)
else: # 此时为绿灯
t = g_t
elif k == 2: # 当为黄灯时
if t > rl + gl: # 此时为黄灯
t = t - (gl + rl)
t = y_t(t)
elif rl <= t <= rl + gl: # 此时为绿灯
t = g_t
else: # 此时为红灯
t = r_t(t)
if k == 3: # 当为绿灯时
if t > yl + rl: # 此时为绿灯
t = g_t
elif yl <= t <= yl + rl: # 此时为红灯
t = t - yl
t = r_t(t)
else: # 此时为黄灯
t = y_t(t)
else:
if k==0:
t=t
else:
t = t - time
if k == 2: # 当为黄灯时,除了指示牌的倒计时t以外,还需要再加上即将等待的红灯时间
t = t + rl
if k == 3: # 当为绿灯时,无等待时间
t = 0
time += t
print(time)
3.测试结果:
- 总结:小白刚刚接触csp,若代码算法关于简单,过于暴力望谅解