CF662C Binary Table【FWT】】的更多相关文章

CF662C Binary Table 题意: 给出一个\(n\times m\)的\(01\)矩阵,每次可以反转一行或者一列,问经过若干次反转之后,最少有多少个\(1\) \(n\le 20, m\le 10^5\) 题解: 可以把每一列看作一个二进制数,这样得到\(m\)个二进制数,记为\(A\),翻转第\(i\)列就相当于把每个二进制数异或上\(1<<i\),由于\(n\)很小,所以枚举所有的翻转组合,一共\(2^n\)种,令\(d(x)\)表示最高位为\(n\)的二进制数中\(0\)和…
题目链接 CF662C 题解 行比较少,容易想到将每一列的状态压缩 在行操作固定的情况下,容易发现每一列的操作就是翻转\(0\)和\(1\),要取最小方案,方案唯一 所以我们只需求出每一种操作的答案 如果操作的行的集合为\(S\),那么对于状态为\(e\)的列,将会变成\(e \; xor \; S\),同时产生\(e \; xor \; S\)的答案 如果\(s\)的答案记为\(b[s]\),状态为\(s\)的列数量为\(a[s]\) 那么对于操作\(S\),最后的答案为 \[\sum\lim…
题面 洛谷题面 (虽然洛谷最近有点慢) 题解 观察到行列的数据范围相差悬殊,而且行的数量仅有20,完全可以支持枚举,因此我们考虑枚举哪些行会翻转. 对于第i列,我们将它代表的01串提取出来,表示为\(v[i]\), 然后我们假设有第0列,其中的第i行如果是1,表示这行将会翻转. 那么可以发现,执行完对行的操作时,每一列的状态为\(x = v[i] \oplus v[0]\),此时我们只需要考虑对列的操作,令\(cnt[i]\)表示状态为\(i\)时01串中1的个数. 显然为了使得1的个数尽可能少…
复习了一发FWT,发现还挺简单的... 没时间写了,就放一个博客吧:Great_Influence 的博客 注意这一句ans[i]=∑j⊗k=i​f[j]∗dp[k]ans[i]= ∑_{j⊗k=i} ​ f[j]∗dp[k]ans[i]=j⊗k=i∑​​f[j]∗dp[k] 本来应该是j⊗i=kj⊗i=kj⊗i=k,变一下就是j⊗k=ij⊗k=ij⊗k=i 然后就是板子了 好强.. CODE #include <bits/stdc++.h> using namespace std; cons…
题意: https://www.cnblogs.com/cjyyb/p/9065801.html 题解:…
CF662C Binary Table 一道 FWT 的板子-比较难想就是了 有一个 \(n\) 行 \(m\) 列的表格,每个元素都是 \(0/1\),每次操作可以选择一行或一列,把 \(0/1\) 翻转,即把 \(0\) 换为 \(1\) ,把 \(1\) 换为 \(0\) .请问经过若干次操作后,表格中最少有多少个 \(1\). \(1 \leq n \leq 20\) \(1 \leq m \leq 10^5\) 先说说 FWT 干嘛的吧 \(F_k = \sum_{i \oplus j…
[CF662C]Binary Table(FWT) 题面 洛谷 CF 翻译: 有一个\(n*m\)的表格(\(n<=20,m<=10^5\)), 每个表格里面有一个\(0/1\), 每次可以将一行或者一列的\(01\)全部翻转 回答表格中最少有多少个\(1\) 题解 发现\(n\)很小,\(m\)很大 状压是跑不掉了 如果我们确定翻转哪些行,那么答案唯一确定(贪心的选每一列中\(0/1\)的较小值) 相同的列显然可以合并, 把每一列按照\(01\)状压,记\(a[i]\)为状态为\(i\)的列…
606. Construct String from Binary Tree [easy] You need to construct a string consists of parenthesis and integers from a binary tree with the preorder traversing way. The null node needs to be represented by empty parenthesis pair "()". And you…
Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root. Example:Given a binary t…
传送门 \(N \leq 20\)很小诶 一个暴力的思路是枚举行的翻转状态然后在列上贪心 复杂度为\(O(2^NM)\)显然过不去 考虑到可能有若干列的初始状态是一样的,那么在任意反转之后他们贪心的策略肯定是相同的 考虑状压,设\(f_i\)表示初始状态为\(i\)的列的个数,\(g_i\)表示经过行反转,某一列到达\(i\)状态时,这一列留下的最少的\(1\)的可能个数,\(h_i\)表示行翻转状态为\(i\)时的答案 那么\(h_i = \sum\limits_{j\ xor\ k = i}…
题面 题解 我们会发现,如果单独的一列或一行,它的答案是O1确定的,如果确定了每一行是否变换,那么最后的答案也就简单了许多, 如果确定了行的变换状压下来是x(即x的i位表示第i行是否变换,理解就行),那么每列的状态就要异或x,这没问题吧 接着,其实它的行列是可以交换顺序的,对答案没有影响,状态一定的列的最终贡献都一样, 所以就把状态为 i 的列的数量记为 c[i],方便计算, 然后,提前预处理出列的状态为 i 时单独考虑的答案 f[i](即反转或不反转的最小1数量),方便计算 若枚举行的变换x,…
题目 Source http://codeforces.com/contest/663/problem/E 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 invert all value…
来自:http://dinglin.iteye.com/blog/1791922 有同学问到 checksum table在逻辑备份时候前后是否可以用于验证数据一致性.扩展一下发现有一些有趣的问题,比如数据插入顺序不同.表引擎不同.操作系统位数不同等. 插入顺序不同是否有影响 我们知道全表扫描是可以有很多种顺序的,尤其当表里面出现过delete动作以后,逻辑导出再导入另外一个表后,两个表的全表扫描结果可能不同. Checksum table计算返回值的逻辑大致如下: ha_checksum cr…
题目分析: 好题.本来是一道好的非套路题,但是不凑巧的是当年有一位国家集训队员正好介绍了这个算法. 首先考虑静态的情况.这个的DP方程非常容易写出来. 接着可以注意到对于异或结果的计数可以看成一个FWT的过程,进一步地可以注意到FWT在中途没有还原的必要.从FWT的过程中我们可以发现FWT具有可加性和交换律结合律. 这样原问题可以在静态的情况下通过树形DP做到$O(nm)$. 考虑动态的问题.根据<神奇的子图>命题报告及其拓展中描述的算法五,我们应该不难想到基于树链剖分的这样的做法. 首先对树…
题目链接 hdu6057 题意 给出序列\(A[0...2^{m} - 1]\)和\(B[0...2^{m} - 1]\),求所有 \[C[k] = \sum\limits_{i \; and \; j = k} A[i \; xor \; j]B[i \; or \; j]\] 题解 我只能感叹太神了 看到题目我是懵逼的 首先注意三者运算的关系: \[(i \; and \; j) + (i \; xor \; j) = (i \; or \; j)\] 证明显然 于是我们枚举\(x = i…
题目链接 CSU1911 题解 FWT模板题 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<vector> #include<queue> #include<cmath> #include<map> #define LL long long in…
题目链接 BZOJ4589 题解 FWT 模板题 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<vector> #include<queue> #include<cmath> #include<map> #define LL long long…
Description Solution 我们考虑将问题一步步拆解 第一步求出\(F_{S,i}\)表示一次旅行按位与的值为S,走了i步的方案数. 第二步答案是\(F_{S,i}\)的二维重复卷积,记答案为\(S_{S,i}\),那么\(F_{S,i}\times S_{T,j}\)能够贡献到\(S_{S\&T,i+j}\). 上下两部分是两个问题,我们分开来看. 考虑第一步 设原矩阵为A 根据定义,\[F_{S,i}=\sum\limits_{x\&y=T}A^i_{x,y}\] 容易看…
luogu 题意 你有一个\(n*m\)的\(01\)矩阵.你可以把任意一行或者一列的\(01\)取反.求矩阵中最少的\(1\)的数量. \(n\le20,m\le10^5\) sol 很自然地有一个\(O(2^nm)\)的暴力:枚举横行的取反情况,然后纵列就取\(01\)数量较少的一者. 我们记状态\(x\)在原矩阵中的出现次数为\(a[x]\),状态中\(01\)较少一者的数量为\(b[x]\). 会发现当最终的取反状态为\(i\)时,会有\(ans_i=\sum_{j\otimes k=i…
Description 你有一个随机数生成器,它会以一定的概率生成[0,2^N-1]中的数,每一个数的概率是由序列A给定的,Pi=Ai/sum(Ai) 现在有一个初始为0的数X,每一轮随机生成一个数v,将X变成X xor v 求X变成0~2^N-1的期望轮数 答案对998244353取模 N<=18,Ai<=1000 Solution 不妨反过来做,f[i]为i到0的期望轮数,显然等价 易得i>0, \[f[i]=1+\sum f[i\ xor\ j]p[j]\] 1移到左边来 \[f[…
Given a tree, you are supposed to tell if it is a complete binary tree. Input Specification: Each input file contains one test case. For each case, the first line gives a positive integer N (≤) which is the total number of nodes in the tree -- and he…
正题 题目链接:https://www.luogu.com.cn/problem/CF1119H 题目大意 \(n\)个可重集,第\(i\)个里有\(x\)个\(a_i\),\(y\)个\(b_i\),\(z\)个\(c_i\). 对于每个\(t\in[0,2^k)\)求每个集合里取出一个数使它们异或起来等于\(t\)的方案数. 解题思路 如果直接\(n\)个东西\(FWT\)起来肯定过不了,我们需要根据每个集合里只有三种数这个性质来优化. 因为是\(xor\)卷积,所以第\(i\)个位置\(F…
正题 题目链接:https://darkbzoj.tk/problem/4589 题目大意 求有多少个长度为\(n\)的数列满足它们都是不大于\(m\)的质数且异或和为\(0\). 解题思路 两个初始多项式\(F[0]=1\),\(G[prime\leq m]=1\),然后答案就是\(F\ xor\ G^n\).然后\(\text{FWT}\)之后点值快速幂就好了. 时间复杂度\(O(n\log n)\) \(\color{white}{写水题有助于背板}\) code #include<cst…
正题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5909 题目大意 给出\(n\)和\(m\)(\(m=2^k\)).再给出一个大小为\(n\)的树,每个点有点权,对于每个\(i\in[1,m)\)求有多少个联通子图的点权异或和为\(i\) \(1\leq T\leq 10,1\leq n\leq 1000,1\leq m\leq 2^{10}\) 解题思路 设\(f_{i,j}\)表示\(i\)的子树中包含\(i\)的联通子图里面,异或和为\…
<题目链接> 题目大意: 有一个长度为n(n<1000)的01串,该串中至少有一个0和一个1,现在由你构造出一些01串,进行询问,然后系统会给出你构造的串与原串的   Hamming distance ,现在要求你按照步骤进行交互式操作,最终得到任意一个0.1的下标. 解题分析:因为原串中至少存在一个0和一个1,所以一定存在一个01或者10序列,因此我们可以用二分来寻找这个序列(注意二分过程中选择区间的操作).二分之后,一定能够得到01或10序列,然后将其按先0后1的顺序输出即可. #i…
几天前模拟区域赛的一道题,今天发现在草稿箱里直接补个博客. 感觉这还是一道很有意思的构造题. 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5573 题意: 给你一个二叉树,根节点为1,子节点为父节点的2倍和2倍+1,从根节点开始依次向下走k层,问如何走使得将路径上的数进行加减最终结果得到n. 分析: 首先明确由1.2.4...2k可以构造出所有小于2k+1的数,那么实际上只要走2的幂次即最左边的结点即可. 那么实际上这个过程就类似整数的二进制表…
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAz0AAAKiCAIAAABzTSUAAAAgAElEQVR4Aey9C5RnWVXff4GBUR6j8ugZSeyuEsToOMWjWxRMd1tkHgSTimFNY/Bv/ylKEcTCIEz9MWJXSLWMsBoMcQrCKOn8WKXB2EoytQLOa/mjuxEVWoYuRBQZq7ojZGZgjI68Znj0f599Xnufe+7j96qqX9f3t3r175579tl7n88599x9…
正题 题目链接:https://www.luogu.com.cn/problem/CF438E 题目大意 每个节点有\(n\)个权值可以选择,对于\(1\sim m\)中的每个数字\(k\),求权值和为\(k\)的二叉树个数. 解题思路 设\(f_n\)表示权值和为\(n\)的方案数,\(g_n\)表示\(n\)这个权值是否可用. 那么我们对于一个\(n\)的转移,可以枚举根节点的权值,然后再用\(f\)去计算子节点的权值,具体的式子是 \[f_n=\sum_{w=1}^ng_w\sum_{i=…
[4]Median of Two Sorted Arrays [29]Divide Two Integers [33]Search in Rotated Sorted Array [34]Find First and Last Position of Element in Sorted Array [35]Search Insert Position [50]Pow(x, n) [69]Sqrt(x) [74]Search a 2D Matrix (2019年1月25日,谷歌tag复习)剑指of…
本文来自:http://blog.itpub.net/22664653/viewspace-1714269/ 一 前言  MySQL 的主从复制作为一项高可用特性,用于将主库的数据同步到从库,在维护主从复制数据库集群的时候,作为专职的MySQL DBA,笔者相信大多数人都会遇到“Got fatal error 1236 from master when reading data from binary log” 这类的报错/报警.本文整理了常见的几种 error 1236 报错,并给出相应的解决…