摘要:
"luogu" 题意 你有一个$n m$的$01$矩阵。你可以把任意一行或者一列的$01$取反。求矩阵中最少的$1$的数量。 $n\le20,m\le10^5$ sol 很自然地有一个$O(2^nm)$的暴力:枚举横行的取反情况,然后纵列就取$01$数量较少的一者。 我们记状态$x$在原矩阵中的出现 阅读全文
摘要:
"vjudge" 题意 两个数组$\{a_i\}$和$\{b_i\}$,求从中分别选出两个数或运算结果为$x$的方案数。 sol 裸的FWT。 code cpp include include include using namespace std; int gi(){ int x=0,w=1;ch 阅读全文
摘要:
"bzoj" 题意 求选出$n$个$[1,m]$之间的质数使其异或和为$0$的方案数。 $n\le10^9,m\le50000$ sol 设$f_{i,j}$表示已经选了$i$个数异或和为$j$的方案数。 直接$dp$转移复杂度$O(m^2n)$ 发现$n$次的转移是一样的可以快速幂优化$O(m^2 阅读全文
摘要:
快速沃尔什变换$FWT$ 是一种可以快速完成集合卷积的算法。 什么是集合卷积啊? 集合卷积就是在集合运算下的卷积。比如一般而言我们算的卷积都是$C_i=\sum_{j+k=i}A_j B_k$,而集合卷积计算的就是$C_i=\sum_{j\otimes k=i}A_j B_k$,其中$\otimes 阅读全文