Loading

NOI2025d2t2

感觉一辈子也学不会集合幂级数。

首先有一个 \(O(n4^n)\) 的(并非)暴力,即计算 \(w_{i,j}\) 表示 \(\sum\limits_{i\subseteq f(S),j\subseteq f(T),S\cap T=\varnothing}\prod\limits_{x\in S\cup T} a_x\),再使用高维后缀差分还原回去。

计算 \(w_{i,j}\),拆成都不能放、可以放进 \(S,T\),与两个都能放的情况,就是 \(\prod\limits_{i\subseteq x,j\nsubseteq x}(1+a_x)\prod\limits_{i\nsubseteq x,j\subseteq x}(1+a_x)\prod\limits_{i\cup j\subseteq x}(1+2a_x)\),前面两个东西拆成 \(i\subseteq x\) 去掉 \(i\cup j\subseteq x\) 的形式,最终的式子是 \(w_{i,j}=\frac{\prod\limits_{i\subseteq x}(1+a_x)\prod\limits_{j\subseteq x}(1+a_x)\prod\limits_{i\cup j\subseteq x}(1+2a_x)}{\left(\prod\limits_{i\cup j\subseteq x}(1+a_x)\right)^2}\),记 \(v_s=\sum\limits_{i\cup j=s}w_{i,j}\),求出 \(\prod\limits_{i\subseteq x}(1+a_x)\) 后直接或卷积就能求出来了!
\(1+a_x=0\) 的情况使用经典(?)trick 处理,记录 \(0\) 的个数,或卷积时只保留个数相等的。

\(f_{s}\) 表示 \(\sum\limits_{f(S)=f(T)=s,S\cap T=\varnothing}\prod\limits_{x\in S\cup T} a_x\),考虑用 IFWT 还原回去的过程中,\(w_{i,j}\)\(f_{s}\) 产生的贡献是 \(1\) 还是 \(-1\),答案为 \(\sum\limits_{s}f_{s}=\sum\limits_{s}\sum\limits_{s\subseteq i,s\subseteq j}(-1)^{(|i|-|s|)+(|j|-|s|)}w_{i,j}=\sum\limits_{s}\sum\limits_{s\subseteq i\cap j}(-1)^{|i|+|j|}w_{i,j}\)
\(v_{s}\) 的形式是 \(i\cup j\),比较不牛。但是注意到 \(|i\cap j|+|i\cup j|=|i|+|j|\)(诗人我吃),\(\frac{\sum\limits_s[s\subseteq i\cap j]}{\sum\limits_s[i\cup j\subseteq s]}=2^{|i\cap j|-(n-|i\cup j|)}=2^{|i|+|j|-n}\),所以 \(\sum\limits_{s}\sum\limits_{s\subseteq i\cap j}(-1)^{|i|+|j|}w_{i,j}=\sum\limits_{s}\sum\limits_{i\cup j\subseteq s}2^{|i|+|j|-n}(-1)^{|i|+|j|}w_{i,j}\),只需要在 \(v_s\) 的基础上稍作改动,求出 \(\sum\limits_{i\cup j\subseteq s}(-2)^{|i|+|j|}w_{i,j}\) 即可。

posted @ 2025-07-20 12:41  AsiraeM  阅读(16)  评论(0)    收藏  举报