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);就可以了