Codeforces习题 148A Insomnia cure

发布于 / 技术 / 0 条评论

这个题目最大的难点在于龙的数量 d 可能会达到 105,处理如此巨大的数值很有可能会导致题目超时。然后阅读问题我们可以发现,这个问题实际上就是要求在d范围内所有能整除 k, l, m, n 中任意一个的数字有多少。

如果按照传统的方法对数组进行遍历,不仅运算时间很长,而且会有很多的无效运算,所以我们采取另一个方式,这里涉及到了一个函数:

range(start, stop[, step])

从 start 开始,到 stop 结束,步进是 step 。说到这里,就能看出通过这个函数可以快速的看出一个数组中包含多少step的整数倍数。有了这个函数,我们就可以代替很多计算步骤来快速的求出这个问题的答案。

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自动检测。

本网站在未特殊说明的情况下采用知识共享署名-非商业性使用-相同方式共享 3.0 协议进行许可。
<-数据丢失->