CCFCSP 201812-2 小明放学(Python)

该博客主要介绍如何使用Python解决CCFCSP 201812-2题目的红绿灯等待时间问题。通过分析不同情况下红绿灯的状态,利用对总时间取余的方法确定等待时间,详细阐述了k=0,1,2,3四种情况的处理方式,并提供了相应的代码实现。" 124776963,10658502,OpenCV骨架提取算法详解,"['计算机视觉', '图像处理', 'OpenCV库', 'Java', '后端开发']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路

可知,每当过r+y+g时间时为一轮回,与刚开始出发时的各个红绿灯的情况相同,所以在考虑每个红绿灯是什么情况时,采用对总时间取余的方法,即下方代码中的re。

  1. k=0的情况

直接相加。

  1. k=1的情况
    在这里插入图片描述
    总体情况如图所示,则需分别判定re是否位于两个红框内。
    第一个红框表示为re<t(此时没有=,由于当re=t时不需要等待)。此范围内需要等待的时间为t-re
    第二个红框表示为g+t<=re<=y+g+r,而由于re始终<=y+g+r,所以只需写为g+t<=re(此时有=由于刚好为黄灯是需要等待的)。此时等待时间为y+r-(re-(g+t)),化简为y+r+g+t-re
  2. k=2的情况
    在这里插入图片描述
    第一个红框表示为re<t+r,此时需要等待时间为t+r-re
    第二个红框表示为re>=t+r+g,等待时间为y+r-(re-(t+r+g))化简为y+2r+g+t-re
  3. k=3的情况
    在这里插入图片描述
    只有一个红框,所以为t<=re<=y+r+t.此时需要等待时间为y+r+t-re。

代码

r,y,g=list(map(int,input().split()))
n=int(input())
result=0
for i in range(n):
    k,t=list(map(int,input().split()))
    re=result%(r+y+g)
    if k==0:
        result+=t
    elif k==1:
        if t+g<=re:
            result+=y+g+r+t-re
        if re<t:
            result+=t-re
    elif k==2:
        if re<t+r:
            result+=t+r-re
        if re>=t+r+g:
            result+=t+2*r+y+g-re
    elif k==3:
        if t<=re<=t+y+r:
            result+=y+r+t-re    
print(result)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值