腾讯笔试题

请问红白花那个题
为什么爆超时啊?我是O(n)复杂度的


t,k = list(map(int,input().split()))
dp = [1] * (100000+1)
for i in range(k,100000+1):
    dp[i] = (dp[i-k] + dp[i-1])%(int(10e9+7))
    
for _ in range(t):
    a,b = list(map(int,input().split()))
    result = sum(dp[a:b+1])%(int(10e9+7))
    print(result)


------------------分割线--------------------
破案了,mod多了一个0
我真傻 真的
t,k = list(map(int,input().split()))
dp = [1] * (100000+1)
mod = int(1e9+7)
for i in range(k,100000+1):
    dp[i] = (dp[i-k] + dp[i-1] + mod)%mod
for i in range(1,100000+1):
    dp[i] += (dp[i-1]+mod)
    dp[i] = dp[i]%mod
for _ in range(t):
    a,b = list(map(int,input().split()))
    result = (dp[b]-dp[a-1]+mod)%mod
    print(result)


#腾讯##笔试题目#
全部评论
import sys if __name__ == "__main__":     T, K = map(int, sys.stdin.readline().strip().split())     lst = []     maxLen = 0     mod = 10 ** 9 + 7     for t in xrange(T):         line = map(int, sys.stdin.readline().strip().split())         lst.append(line)         maxLen = max(maxLen, line[-1])     l = [1 for _ in xrange(K)]     for i in xrange(K, maxLen + 1):         l.append(l[-1] + l[i-K])     for t in xrange(T):         a, b = lst[t]         print sum(l[a:b+1]) % mod 这个能100%
点赞 回复 分享
发布于 2019-09-01 22:54
result = sum(dp[a:b+1])%(int(10e9+7)) 加上这里就是n平方了
点赞 回复 分享
发布于 2019-09-01 22:32
感觉这题应该是有个推导出来的公式,可以只需要On时间内计算出来
点赞 回复 分享
发布于 2019-09-01 22:39
这题要取模的吗?题目好像没说?
点赞 回复 分享
发布于 2019-09-01 22:40
sum这一步没必要,直接dp保存和,然后减起点就是区间了,然后最后一步再取模,反正python无现长
点赞 回复 分享
发布于 2019-09-01 22:51
楼上17行,100%的代码,我感觉跟我的思路差不多呀,但是我就超时了,谁能给我分析分析为啥速度差这么多? # encoding: utf-8 import sys res_dict = {} max_key = 0 def search(length, k):   global max_key   res_dict[0] = 1   if max_key >= length:     return res_dict[length]   else:     start = max_key   start = max(1, start)   for length_tmp in range(start, length + 1):     res_dict[length_tmp] = res_dict[length_tmp-1]     if length_tmp - k >= 0:       res_dict[length_tmp] += res_dict[length_tmp-k]     res_dict[length_tmp] %= (1e9+7)   max_key = length   return res_dict[length] line = [int(val) for val in sys.stdin.readline().strip().split(' ')] t = line[0] k = line[1] for group_idx in range(t):   line = [int(val) for val in sys.stdin.readline().strip().split(' ')]   a = line[0]   b = line[1]   if k == 0:     print 1     continue   count = 0   for length in range(a, b+1):     count += search(length, k)   print int(count % (1e9+7))
点赞 回复 分享
发布于 2019-09-02 00:12
能讲讲思路吗
点赞 回复 分享
发布于 2019-09-02 09:19
楼主能否讲下思路捏~我用c++,python看起来有点吃力,感谢~~~
点赞 回复 分享
发布于 2019-09-02 10:43

相关推荐

尊尼获获:闺蜜在哪?
点赞 评论 收藏
分享
今天 09:08
裁应届生,一分钱补偿没有,离职了还脑控你,跟踪你,定位你,丁东服务是搞系每一个人
牛客吹哨人:建议细说...哨哥晚点统一更新到黑名单:不要重蹈覆辙!25届毁意向毁约裁员黑名单https://www.nowcoder.com/discuss/1317104
叮咚买菜稳定性 8人发布 投递叮咚买菜等公司10个岗位 >
点赞 评论 收藏
分享
点赞 8 评论
分享
牛客网
牛客企业服务