N,M作为输入,最初给出N个项目,这些项目可以被标记并交换为新项目,这样就为这些标记项目的M给出了1个新项目,问题是找到最大数量的可以用这种方式标记的项目。例如:
输入:10 2
N = 10,M = 2
然后输出为:10 + 5 + 2 + 1 + 1
因为
首先标记给定的10(N)个项目,然后将所有10个项目交换为5个新项目(N / M)并标记,
然后将其中4个交换(1个为将来保存)2个新的并标记,
然后换了1个新的一个,这个新的标记和
一起保存,然后交换一个新的并标记。
Constraints:
1 <= N <= 1000
2 <= M <= 1000
这是我试过的:
n,m = map(int,raw_input().split())
s = n
aux = 0
while n!=1:
aux = n%m
n /= m
s +=n
n +=aux
print s
但是通过法官这太慢了。我怎样才能加快速度?还有其他任何算法吗?
答案 0 :(得分:0)
n,m = map(int,raw_input().split())
s = n
aux = 0
while n>=m:
n, aux = divmod(n, m)
s +=n
n +=aux
print s
循环的终止条件是错误的并且应该是当前值<因为我们不能得到新的物品,我们有lees而不是我们留下的M标记物品。