三哥烤丝瓜

三哥烤丝瓜

题目:三哥很喜欢吃丝瓜,尤其是烤丝瓜,三哥有一个巨大丝瓜想要烤着吃。为了节约能源,厨房里的炉子在打开k分钟后自动关闭。烹饪时,三哥每隔d分钟就去厨房,如果炉子关了,她就打开炉子。当炉子关闭时,它依然保持温度,但会有所降低。众所周知,如果打开炉子,丝瓜在炉子上烹调到熟需要t分钟,如果关闭炉子,炉子依然是温暖的,则需要2t分钟。你需要弄清楚,三哥需要花多少时间来烤丝瓜。(当炉子关闭的瞬间三哥进入厨房他也会打开炉子)
单行包含三个整数k,d,t(0<k,d,t<1018 )。
打印单个数字,烹饪总时间(分钟)。如果你的答案与正确答案的差的绝对值小于10-8,则认为正确
来源:牛客网
链接 https://ac.nowcoder.com/acm/contest/24803/K

个人思路
  1. 分为以下几种情况
    ① 当t <= k时,也就是炉子还没到达关闭时瓜就能煮熟,所以可以直接返回t

    ② 当①不满足即t > k且d > k时,也就是三哥每次都在炉子关闭后才来,这时我们需要判断瓜是否在三哥来之前就熟了,如果熟了,则返回k + 2 * (t-k){关闭炉子后效率降低,要乘以2},如果没熟,返回d + resolve(k,d,t-k-0.5*(d-k)){即已经煮了d分钟,瓜剩余要煮的时间为t-k-0.5*(d-k)}

    ③ 当①、②都不满足且k是d的倍数时,也就是三哥每次都会在炉子关闭的时候恰好进来,所以瓜一直都是烤的状态,这时返回瓜要烤的时间,即t

    ④ 当①、②、③都不满足时,即瓜要烤较长时间,d < k且t > k时,这时,我们需要找到每次瓜被烤和被余温热的时间,同理,因为d < k且t > k,所以瓜必然烤了k分钟,炉子关闭后三哥到来前的时间为(k // d +1)*d - k或者d-(k%d),除以2就相当于被烤的时间,如果大于t返回实际时间,否则递归

import sys
sys.setrecursionlimit(100000) # 控制递归次数,例如这里设置为十万 
a,b,c = input().split(' ')
k = eval(a)
d = eval(b)
t = eval(c)
def resolve(k,d,t):
    if t <= k:
        return(t)
    if d > k:
        if k + 0.5 * (d-k) >= t:
            return k + 2 * (t-k)
        else:
            return d + resolve(k,d,t-k-0.5*(d-k))
    if k % d == 0:
        return t
    else:
        if k+0.5*( (k // d +1)*d - k) >= t:
            return k+0.5*(t - k)
        else:
            return (k // d +1)*d + resolve(k,d,t-k-0.5*( (k // d +1)*d - k))
# print('%.9f' % resolve(k,d,t)) # 测试时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值