csp认证真题 201812-2 小明放学(python)总结

注意:此题涉及周期问题。

假设出发时,第二个路口是红灯,还剩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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值