腾讯9.1笔试第二题,测试全过,线上为0%
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)的复杂度或者公式错了?
求大佬解答
#腾讯##笔试题目#