腾讯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)的复杂度或者公式错了?
求大佬解答
#腾讯##笔试题目#
全部评论
同,线下过,线上0
点赞 回复 分享
发布于 2019-09-01 22:21
#include<iostream> #include<vector> #include <cmath> using namespace std; int main(){ int t,k; int book[100001]; cin>>t>>k; for(int i=1;i<100001;i++){ if(i<k){ book[i]=1; }else if(i==k){ book[i]=2; }else{ book[i]=book[i-1]+book[i-2]; } } for(int j=0;j<t;j++){ int a,b; int res=0; cin>>a>>b; for(int i=a;i<=b;i++){ res+=book[i]; } cout<<res%1000000007<<endl; } return 0; } //3 2 //1 3 //2 3 //4 4
点赞 回复 分享
发布于 2019-09-01 22:49

相关推荐

不愿透露姓名的神秘牛友
11-27 10:48
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务