全部评论
O(n*logn)复杂度的 import sys
if __name__ == "__main__":
t,k=sys.stdin.readline().strip().split()
t,k=int(t),int(k)
for _ in range(t):
a,b=sys.stdin.readline().strip().split()
a,b=int(a),int(b)
times=0
count=0
for i in range(a,b+1):
white = 0
times=0
while white<=i:
if white==0:
count+=1
else:
count+=i-white+1
times+=1
white = times * k
print(count)
简化为O(n)的代码:
import sys
if __name__ == "__main__":
t,k=sys.stdin.readline().strip().split()
t,k=int(t),int(k)
for _ in range(t):
a,b=sys.stdin.readline().strip().split()
a,b=int(a),int(b)
count=0
for i in range(a,b+1):
n=i//k
count+=(1+n*i-(1+n)*n*k/2+n)
print(int(count))
测试用例全过了,但是线上通过率0%。说循环有误或者算法复杂度过大。难道要O(1)的复杂度? 求大佬解答
用dp的方法。 [t,k] = list(map(int,input().split()))
maxn = int(1e5 + 100)
dp = [[0]*2 for _ in range(maxn)]
dp[1][1] = 1
dp[k][0] = 1
ans = [0]*maxn
for i in range(1,100000):
dp[i+k][0] += (dp[i][0] + dp[i][1])
dp[i+1][1] += (dp[i][0] + dp[i][1])
ans[i] = ans[i-1] + dp[i][0] + dp[i][1]
while t:
[a,b] = list(map(int,input().split()))
print(ans[b] - ans[a-1])
t -= 1 最后不知道过了多少,快要交卷了
相关推荐
昨天 16:50
门头沟学院 Java 点赞 评论 收藏
分享
11-25 19:33
南京理工大学 C++ 乡土丁真真:佬很厉害,羡慕~虽然我还没有到校招的时候,也想讲一下自己的看法:我觉得不是CPP的问题,佬的背书双2,技术栈加了GO,有两段实习。投了123,面了30.拿到11个offer。这个数据已经很耀眼了。这不也是CPP带来的吗?当然也不止是CPP。至少来说在这个方向努力过的也会有好的结果和选择。同等学历和项目选java就会有更好的吗?我个人持疑问态度。当然CPP在方向选择上确实让人头大,但是我觉得能上岸,至于最后做什么方向,在我看来并不重要。至于CPP特殊,有岗位方向的随机性,java不是不挑方向,只是没得选而已。也希望自己以后校招的时候能offer满满
点赞 评论 收藏
分享
点赞 评论 收藏
分享
投递阿里国际数字商业集团等公司10个岗位 >
点赞 评论 收藏
分享