猿辅导笔试0327 第二题

我觉得我的代码没问题啊。。本地测了多组都过了,但提交一直0.0%,大佬们看看有啥问题。。
import sys
N = int(sys.stdin.readline().strip())
line = sys.stdin.readline().strip()
arr = list(map(int, line.split()))
k = int(sys.stdin.readline().strip())
if N == 1:
    if arr[0] <= k:
        print('1')
    else:
        print('0')
else:
    rec = [arr[0]]
    res = 0
    if arr[0] <= k:
        res += 1
    tmp = arr[0]

    for i in range(1, len(arr)):
        for j in rec[-i:]:
            tmp = j | arr[i]
            rec.append(tmp)
            if tmp <= k:
                res += 1
        rec.append(arr[i])
        if arr[i] <= k:
            res += 1
        res = int(res % (10e9+7))
    print(res)
# 1 2 3 4
# (1) (1,2)(2) (1,2,3)(2,3)(3) (1,2,3,4)(2,3,4)(4)
# 依次增添元素,rec中保存每个数组片段的或值,遇到一个或值<=阈值k就计数加一


#猿辅导##笔试题目#
全部评论
超时了吧,一趟遍历后直接计算就可以,遍历时找出所有大于target的数的位置,然后计算所有夹在这些位置之间的组合数就好,每次计算就是一个等差数列求和,复杂度n
1 回复
分享
发布于 2021-03-27 21:37
我觉得这道题的思想是:我们可以通过[i,j]的值,求出[i+1,j]的值,从而不用遍历整个数组。
点赞 回复
分享
发布于 2021-03-30 19:26
联想
校招火热招聘中
官网直投

相关推荐

头像
点赞 评论 收藏
转发
点赞 1 评论
分享
牛客网
牛客企业服务