D题题解(乱搞+背包)

想法其实比较简单, 我们考虑先假设往一个方向一直移动完, 这时候如果某一次移动后悔, 相当于反向走原来的两倍, 我们直接用01背包, 在最坏 O(nm) 的时间内找出能否拼凑出一个值,使得 sum(a)-value = 0 (mod n)

ac代码:

import sys
from collections import deque
from heapq import heappop,heappush
from math import ceil,inf,sqrt
input = sys.stdin.readline

def solve():
    n,m = map(int, input().split())
    a = list(map(int, input().split()))
    for i in range(m):
        a[i] %= n
    su = sum(a) % n
    for i in range(n):
        a[i] = (2*a[i]) % n
    f = [0]*(su+1)
    f[0] = 1
    for i in range(n):
        for j in range(su,a[i]-1,-1):
            f[j] += f[j-a[i]]
    print("YES" if f[su] != 0 else "NO")

# for _ in range(int(input())):
#     solve()
solve()
全部评论
你这循环里面n, m的意义都不对吧?
点赞 回复 分享
发布于 2024-03-08 22:03 湖北

相关推荐

小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务