Codeforces #662C Binary Table】的更多相关文章

听说这是一道$ Tourist$现场没出的题 Codeforces #662C 题意: 给定$n*m的 01$矩阵,可以任意反转一行/列($0$变$1$,$1$变$0$),求最少$ 1$的数量 $ n<=20 \ m<=100000$ $ Solution$ 考虑暴力 枚举每一行反转/不反转 预处理$ g(s)$表示某状态为$ s$的列的最少$ 1$的数量 显然$ g(s)=min(popcount(s),n-popcount(s))$ 枚举每行是否反转之后直接$ O(m)$计算即可 时间复杂…
题目链接 \(Description\) 给定一个\(n\times m\)的\(01\)矩阵,你可以选择一些行和一些列并将其中所有的\(01\)反转.求操作后最少剩下多少个\(1\). \(n\leq20,m\leq10^5\). \(Solution\) \(n\)这么小,要想到一是可以状压状态,二是可以枚举选了哪些行. 发现在确定了选哪些行之后,每一列的选择是确定的(取变与不变后得到的状态中\(1\)较少的那个). 那么假设\(y\)为这一列的最终状态(可以状压表示出来),则这一列的答案为…
题意:给一个N*M的0-1矩阵,可以进行若干次操作,每次操作将一行或一列的0和1反转,求最后能得到的最少的1的个数. 分析:本题可用FWT求解. 因为其0-1反转的特殊性且\(N\leq20\),将每一列j视作一个N位二进制数\(A[j]\),则一共有M个N位数,则可以统计出每个二进制数i的个数\(num[i]\).将所有的行反转操作组合也视作一个N位二进制数\(S\). 那么如何将本题与FWT结合? 首先根据异或运算的结合律:\(S\oplus A[j]=B\),则\(S = A[j] \op…
题目 Codeforces 题目链接 分析 大佬博客,写的很好 本蒟蒻就不赘述了,就是一个看不出来的异或卷积 精髓在于 mask对sta的影响,显然操作后的结果为mask ^ sta AC code #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long LL;//必须用long long,过程中可能炸int const int MA…
某变换好题.不过听说还有O(2^n*n^2)DP的…… Description 给定一个n*m的01矩阵,你可以选择对任意行和任意列取反,使得最终“1”的数量尽量少. Input 第一行两个整数n,m. 接下来n行,每行m个字符,描述一个01矩阵. Output 一个整数表示最少的1的数量. Sample Input 3 4 0110 1010 0111 Sample Output 2 HINT 1 <= n <= 20,1 <= m <= 100000. Solution 首先发…
用FWT优化计算. 首先发现行数很小,想到一个暴力的方法,就是以一个二进制位$0$表示这一行不翻转而二进制位$1$表示这一行翻转,然后$2^n$枚举出所有行的翻转情况,再$O(m)$计算所有的结果. 用$a_i$表示第$i$列的原来的情况,有计算式: $$ans_s = \sum_{i = 1}^{m}(a_i \oplus s) * min(bit_{a_i \oplus  s}, n - bit_{a_i \oplus s})$$ 这里的$bit_i$表示$i$的二进制表示中$1$的个数.…
C. Binary Table 题目连接: http://codeforces.com/problemset/problem/662/C Description You are given a table consisting of n rows and m columns. Each cell of the table contains either 0 or 1. In one move, you are allowed to pick any row or any column and i…
题目链接:Codeforces 417E Square Table 题目大意:给出n和m.要求给出一个矩阵,要求每一列每一行的元素的平方总和是一个平方数. 解题思路:构造.依照 a a a b a a a b a a a b c c c d 的方式取构造,然后a,b,c,d的值用随机生成数去枚举,只是我认为用暴力也是能够的. #include <cstdio> #include <cstring> #include <cmath> #include <cstdli…
[CF662C]Binary Table(FWT) 题面 洛谷 CF 翻译: 有一个\(n*m\)的表格(\(n<=20,m<=10^5\)), 每个表格里面有一个\(0/1\), 每次可以将一行或者一列的\(01\)全部翻转 回答表格中最少有多少个\(1\) 题解 发现\(n\)很小,\(m\)很大 状压是跑不掉了 如果我们确定翻转哪些行,那么答案唯一确定(贪心的选每一列中\(0/1\)的较小值) 相同的列显然可以合并, 把每一列按照\(01\)状压,记\(a[i]\)为状态为\(i\)的列…
[CF662C]Binary Table 题意:给你一个$n\times m$的01网格,你可以进行任意次操作,每次操作是将一行或一列的数都取反,问你最多可以得到多少个1? $n\le 20,m\le 10^5$ 题解:我也不知道叫啥了,说状压也不对,说fwt也不太对,就叫按位处理得了. 显然有$O(2^nm)$暴力,先枚举每行是否取反,然后枚举每列,如果0多就取反,否则不取. 但我们发现我们完全可以将本质相同的列一起处理,什么叫本质相同的列呢?假如我们对每行是否取反的状态为S,则所有$xor…