Warning: session_start(): open(/tmp/sess_644c6307b4fc810b68e10b6e686cbe82, O_RDWR) failed: No space left on device (28) in /data/wiki/inc/init.php on line 239

Warning: session_start(): Failed to read session data: files (path: ) in /data/wiki/inc/init.php on line 239

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/auth.php on line 430

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/actions.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/lib/tpl/dokuwiki/main.php on line 12
2020-2021:teams:wangzai_milk:fwt刷题 [CVBB ACM Team]

用户工具

站点工具


2020-2021:teams:wangzai_milk:fwt刷题

FWT刷题

总之我先放一个题表在这里。

CF662C

题意:给定一个n*m的01矩阵,可以取反若干次任意行或列,问若干次操作之后1最少是多少。

数据范围:$n\leq 20,m\leq 100000$

题解:n的范围很小,我们可以考虑二进制枚举行的取反策略,假设行的翻转策略为S,那么这道题目的答案就是$\sum_{i=1}^m min(f(S\oplus a_i),n-f(S\oplus a_i))$,f函数为这一列1的个数。

那么我们假设$g(i)=min(f(i),n-f(i))$,那么原式就可以改写为$\sum_{j,i\oplus S = j}g(j)\times f(i)$,按照异或的性质,可以直接改写为

$\sum_{j,i\oplus j = S}g(j)\times f(i)$

那么好了,接下来我们就可以轻松的用fwt解决这道题目了。

CF914G

HDU5909

HDU5823

HDU6057

2020-2021/teams/wangzai_milk/fwt刷题.1594915378.txt.gz · 最后更改: 2020/07/17 00:02 由 infinity37