1 条题解

  • 1
    @ 2023-5-4 17:30:12

    容易发现 (v/2)k<263(v/2)^k<2^{63},从而可以认为 v<263/k+1v<2^{63/k+1},也即 log2v<63/k+1\log_2v<63/k+1

    如果 k=3/4/5k=3/4/5,则 v222v\le2^{22},暴力做一次异或卷积即可。

    即,求若干 1+za1+z^a 的异或卷积,可以用 FWT 变成仅在 2count(abitandb)2|\operatorname{count}(a\operatorname{bitand}b) 处权值非 00。找到哪些数和所有给定数交均为偶数即可,而这个可以容斥计算贡献:给大小为 mm 的子集 SmS_m 的贡献,则

    j(mj)Sj=[2m]\sum_j\binom mjS_j=[2|m]

    使用高维前缀和即可做到 O(vlogv)O(v\log v)

    这样就可以求出 FWT 后的数组。最后 IFWT 回来时先不除 22,留到最后计算答案时再除。

    对于 k=1/2k=1/2,考虑枚举计算某 kk 位之间的贡献。显然要 O((logvk))O(\binom{\log v}{k}) 次枚举。

    每次把枚举出来的位压缩成一个 kk 进制数,求这 nn 项的异或卷积即可。

    由于枚举 kk 位压缩后值域很小,暴力分类讨论 FWT 即可。

    参考代码

    • 1

    信息

    ID
    3811
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    12
    已通过
    3
    上传者