CF449D

纪念一下少数自己做出来的计数题。
发现全部与起来为 \(0\) 的限制比较难处理,因为要求每一位至少有一个 \(0\)看到至少,想到容斥
\(f(i)\) 为强制 \(i\) 状态里的二进制位为 \(1\) 的方案数,则 \(ans=\sum_i(-1)^{cnt_i}f(i)\)
由于 \(f_i\) 要求被选的所有数 \(i\) 状态的二进制都为 \(1\),于是找出 \(i\) 状态为 \(1\) 的数的个数,记为 \(c_i\),那么 \(f(i)=2^{c_i}-1\)
对于一个数 \(a_i\),考虑它的贡献,显然它只会对它的所有子集做贡献,那么我们对每个 \(a_i\)\(c_{a_i}+1\),然后做一个高维后缀和就行了。
注意高维后缀和的顺序,要先枚举位再枚举状态来避免算重。

posted on 2022-11-13 17:26  cool_tyl  阅读(94)  评论(0)    收藏  举报