[数学记录]arc137D Prefix Xors

FWT/高维前缀和入门题。

题意:给定一个数列 a,每次迭代把原数组替代为前缀异或和数组,求经过 1m 次操作后 an 的值。n106

首先,无论是手推找规律还是生成函数硬推,k 次后 aian 贡献 (ni+k1k1) 次。

两次异或相互抵消,故 aian 有贡献当且仅当 (ni+k1k1) 是奇数,使用 Lucas 定理,对于每一位,ni+k1 的值都不小于 k1,即 k1ni+k1=k1,或 k1ni=0。后式的一边已经与 k 无关,意义为 k1 在全集中的补集含有 ni 作为子集。可以看成 n 维前缀和,复杂度 O(nlogn)

挺套路,感觉。但是我不会 n 维前缀和,现在会了。我也不会 FWT,现在还是不会。

#include <cstdio>
using namespace std;
const int N = 20, M = 1 << N+2;
int u[M], a[M], n, m;
int main(){
    scanf("%d %d", &n, &m);
    for(int i = n-1; i >= 0; i--) scanf("%d", &a[i]), u[i] = a[i];
    for(int i = 0; i <= 20; i++) {
        for(int j = 0; j < 1 << 20; j++) {
            if(j & (1 << i)) u[j] ^= u[j ^ (1 << i)];
        }
    }
    for(int i = 1; i <= m; i++) {
        printf("%d ", u[((1 << 20) - 1) ^ (i - 1)]);
    }
}

作者:purplevine

出处:https://www.cnblogs.com/purplevine/p/16906170.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   purplevine  阅读(32)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示