本文最后更新于 1198 天前,其中的信息可能已经有所发展或是发生改变。
这个题目最大的难点在于龙的数量 d 可能会达到 105,处理如此巨大的数值很有可能会导致题目超时。然后阅读问题我们可以发现,这个问题实际上就是要求在d范围内所有能整除 k, l, m, n 中任意一个的数字有多少。
如果按照传统的方法对数组进行遍历,不仅运算时间很长,而且会有很多的无效运算,所以我们采取另一个方式,这里涉及到了一个函数:
range(start, stop[, step])
从 start 开始,到 stop 结束,步进是 step 。说到这里,就能看出通过这个函数可以快速的看出一个数组中包含多少step的整数倍数。有了这个函数,我们就可以代替很多计算步骤来快速的求出这个问题的答案。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
k=int(input()) l=int(input()) m=int(input()) n=int(input()) d=int(input()) a=[0]*d if d>=k: for i in range(k,d,k): a[i]=1 if d>=l: for i in range(l,d,l): a[i]=1 if d>=m: for i in range(m,d,m): a[i]=1 if d>=n: for i in range(n,d,n): a[i]=1 ans=a.count(1) if d%k==0 or d%l==0 or d%m==0 or d%n==0: print(ans+1) else: print(ans) |
代码已经通过codeforces自动检测。