题解:AT_abc367_g [ABC367G] Sum of (XOR^K or 0)

Soluton

v=2201

异或和的次幂非常不可做,考虑求出异或和为 i 的方案数 cti,答案即为 i=0vcti×ik

考虑集合幂级数。设 x,y,它们的乘法分别定义为 xaxb=xa xor byayb=y(a+b)modm。那么 ctt 就是:

[xty0]i=1n(1+yxAi)

加入 FWT,简易说明一下 FWT

[xi]FWT(A)=j(1)popcount(i\text{ and }j)[xj]A

原来那个式子变成:

[xty0]IFWT(xij=1n[xi]FWT(1+yxAj))

由于 FWT 的线性性,把 [y0] 放进去:

[xt]IFWT(xi[y0]j=1n[xi]FWT(1+yxAj))

外面的 IFWT 最后做一下就好了,不用管它,我们来观察 j=1n[xi]FWT(1+yxp) 有没有啥性质。

容易发现:

[xi]FWT(1+yxp))={1+ypopcount(i and p)0(mod2)1ypopcount(i and p)1(mod2)

那么我们设 j=1n[xi]FWT(1+yxAj))=(1+y)ai(1y)bi。这个 ai,bi 怎么求呢?

{ai+bi=n,aibi=i=1n(1)popcount(i and Ai)

可以发现设 f=xij=1n[Aj=i]aibi 就是 [xi]FWT(f)

我们再把式子拿回来:

[xt]IFWT(xi[y0](1+y)ai(1y)bi)

(1+y)ai,(1y)bi 都可以 O(nm) 预处理展开后的系数。而 (ai,bi) 总共只有 n+1 种,每种 (1+y)ai(1y)biy0 项系数可以 O(m) 求出。这部分预处理总复杂度 O(nm)

综上,我们在 O(nm) 时间内处理出了 xi[y0]((1+y)ai(1y)bi,最后 IFWT 一下即可得出答案。

ik 部分拿个线性筛可以变成 vlogklogv,不过没啥必要。

时间复杂度 O(nm+vlogv+vlogk)

Summary

主要思路:

  • 写出式子
  • 化简 j=1n[xi]FWT(1+yxAj))
  • 直接做即可。

Code

const int N = 2e5 + 5, M = 105, K = 1.1e6 + 5, mod = 998244353;
typedef Mint<mod> MI;
int n, m, k, x; MI rs, f[K], A[N][M], B[N][M], coe[N];
void fwt(MI* f, int n, int op) {
	MI inv2 = (MI)1 / 2;
	REP(i, 0, n - 1) REP(j, 0, (1 << n) - 1) {
		if (j >> i & 1) continue;
		MI x = f[j], y = f[j ^ 1 << i];
		f[j] = x + y, f[j ^ 1 << i] = x - y;
		if (op < 0) f[j] *= inv2, f[j ^ 1 << i] *= inv2;
	}
}
int main() {
	cin >> n >> m >> k;
	REP(i, 1, n) cin >> x, f[x] += 1;
	A[0][0] = B[0][0] = 1;
	REP(i, 0, n - 1) REP(j, 0, m - 1) {
		A[i + 1][j] += A[i][j];
		A[i + 1][(j + 1) % m] += A[i][j];
		B[i + 1][j] += B[i][j];
		B[i + 1][(j + 1) % m] -= B[i][j];
	}
	REP(i, 0, n) REP(j, 0, m - 1)
		coe[i] += A[i][j] * B[n - i][(m - j) % m];
	fwt(f, 20, 1);
	REP(i, 0, (1 << 20) - 1)
		f[i] = coe[(f[i] + n).x / 2];
	fwt(f, 20, -1);
	REP(i, 0, (1 << 20) - 1)
		rs += f[i] * qpow((MI)i, k);
	cout << rs << '\n';
	return 0;
}
``
posted @   喵仔牛奶  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
主题色彩