201812-1 小明放学

201812-1 小明上学

1. 题目介绍

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,若代码算法关于简单,过于暴力望谅解
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿明同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值