求大佬帮助一下本蒟弱吧!要疯了!

P1150 Peter 的烟

gold_boy_hetao @ 2024-06-10 14:35:58

哪位大佬帮我简化一下

#洛谷 P1150 Peter的烟
n,k = input().split()
n = int(n)    #香烟数为n。
k = int(k)    #k个烟蒂换一根烟。
num = 0    #烟蒂数。
ans = n    #最多抽的烟数。
if n < k:   #如果香烟数不足换一根烟的烟蒂数,就之接打印ans。
    print(ans)
elif n == k:    #如果香烟数等于烟蒂数,就打印ans + 1。
    print(ans + 1)
else:
    while True:
        n -= 1
        num += 1    #Peter抽一根烟,烟数减1,烟蒂数加1。
        if num >= k:    #如果烟蒂数足够换一根香烟。
            ans += 1    #最多抽的烟数增加。
            num -= k    #烟蒂数减少k个。
            n += 1     #现在有的香烟数加1。
        if n == 0 and num < k:    #如果香烟数为0且剩余烟蒂不够换一根香烟。
            break    #退出循环
    print(ans)

我提交后是80分,它显示有两个TLE了。


by kexun_kevin @ 2024-06-10 14:51:08

@gold_boy_hetao

这题很诡异,用 c++ 实现你的思路能对,但 python 不行。我只能换一个更快的思路:不一根一根抽,直接先抽完,再算又能换多少,代码如下:

n,k = input().split()
n = int(n)
k = int(k)
ans = n
while n >= k:
    ans += int(n / k)
    n = int(n / k) + (n % k);
print(ans)

by gold_boy_hetao @ 2024-06-16 16:09:35

@kexun_kevin

非常感谢,非常感谢!


by wenwanru @ 2024-06-29 11:26:12

@gold_boy_hetao 没必要这么麻烦 直接cout<<n+(n-1)/(k-1);就可以了


|