Binary Table (Hard Version) 题意 \(n*m(2\le n,m\le 100)\) 的01矩阵,每次可以选择一个宽度为2的子矩阵,将四个位置中的任意3个进行翻转,即0变1,1变0.要求构造操作次数小于 \(n*m\) 的方案,使得该矩阵最终变成一个全0矩阵. 分析 构造方法可能有很多种,只要能够满足题意即可. 从第一行开始到倒数第三行,逐列扫描,假设当前扫描的位置为 (i,j),且当前位置为1,那么执行操作一或者操作二.\(i\le n-2\) ,只扫描前 \(n-2…
You are given three integers a, b and x. Your task is to construct a binary string s of length n=a+b such that there are exactly a zeroes, exactly b ones and exactly x indices i (where 1≤i<n) such that si≠si+1. It is guaranteed that the answer always…
用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$的个数.…
D2. Kirk and a Binary String (hard version) time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard output The only difference between easy and hard versions is the length of the string. You can hack this pro…
[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 一道 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…
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…
[CF662C]Binary Table 题意:给你一个$n\times m$的01网格,你可以进行任意次操作,每次操作是将一行或一列的数都取反,问你最多可以得到多少个1? $n\le 20,m\le 10^5$ 题解:我也不知道叫啥了,说状压也不对,说fwt也不太对,就叫按位处理得了. 显然有$O(2^nm)$暴力,先枚举每行是否取反,然后枚举每列,如果0多就取反,否则不取. 但我们发现我们完全可以将本质相同的列一起处理,什么叫本质相同的列呢?假如我们对每行是否取反的状态为S,则所有$xor…
D1. Kirk and a Binary String (easy version) 01串找最长不降子序列 给定字符串s,要求生成一个等长字符串t,使得任意l到r位置的最长不降子序列长度一致 从后往前暴力枚举,枚举每个一替换成0后是否改变了l到r位置的最长不降子序列长度 01串的最长不降子序列,可以通过线性dp求解 dp i表示以i结尾的最长不降子序列长度 dp[0]=dp[0]+s[i]=='0'; dp[1]=max(dp[0],dp[1])+s[i]=='1'; #include<bi…
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」 Binary Table 题目链接 题目所给的 \(n\) 很小,于是我们可以考虑这样一种朴素做法:暴力枚举第 \(i\) 行是否翻转,这样每一行的状态就确定了,这时取每一列 \(0/1\) 个数较小的数字即可(因为每一列也可以翻转).这样的时间复杂度是 \(O(m\cdot2^n)\). 但是显然这样过不了. 我们发现表格的具体行列对我们的答案是没有影响的.即我们只需要知道状态为 \(x\) 的行或者状态为 \(x\) 的列的个数即可.由于 \(n\le20\),这启发我们对…
题目链接 题目大意:给定一个棋盘,棋盘上有0或1,你可以将一整行取反或者一整列取反,要使得最后剩的1最少.\((1\le n\le 20,1\le m\le 100000)\). 一个容易想到的思路就是先枚举行是否取反,然后列就看1的个数是否大于\(\frac{n}{2}\)考虑是否取反. 我们设函数\(f(x)\)表示\(min(x_0,x_1)\),\(x\)在二进制状态下0或1最少的个数. 我们设行的取反状态为\(k\),每列的最终状态就是\(sta[i]\ xor\ k\),对答案的贡献…
一 题面 C2. Increasing Subsequence (hard version) 二 分析 需要思考清楚再写的一个题目,不能一看题目就上手,容易写错. 分以下几种情况: 1 左右两端数都小于等于构造的数组的最后一个数字 2 左右两端数至少有一个大于构造的数组最后一个数字 a. 左右两端数字相等,肯定满足上面条件.那么只可能走一个方向,两边都模拟一下,比一下大小即可 b. 左右两端数组不等,则优先看谁满足上面2的情况,若都满足则选最小的 三 AC代码 #include <bits/st…
Description: 1 - n个数问你能否经过加减乘除这些运算n -1次的操作得到24 Solutrion: 一开始想暴力递推,发现n的范围太大直接否决,也否决了我的跑dfs,后来就像肯定有个递推规律,然后从1 - n模拟下,1-3直接no,发现4可以了,那么4 6 8 ……都可以了,就是多乘个1而已,但是模拟5的时候一时石乐志,没模拟出来,哎,就是卡脑子了,所以这个题就荣幸的写了博客 Code /* 写出4 和 5 的构造情况,对于后续的就是多乘个1 */ #include <iostr…
QWQ不得不说 \(cf\)的\(edu\ round\)出这种东西 有点太恶心了 题目大意:给你\(n\)个点,告诉你每个点的最大度数值(也就是说你的度数要小于等于这个),让你构造一个无向图,使其满足直径最大且包含所有点 一看就是个构造题 QWQ但是细节非常多. 大致上的思路就是,我们考虑把度数大于1的点拿出来,然后构成一条链,剩下的往这条链上挂就行,但是挂的时候要注意,优先往最头上的两个点挂,因为这样可以扩大直径,然后搞一搞就好 QWQ (其实是强行凑博客文章数目) 记得特判一下只有一个度数…
题目 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…
A. Black-and-White Cube time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You are given a cube of size k × k × k, which consists of unit cubes. Two unit cubes are considered neighbouring, if…
A. Black-and-White Cube time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You are given a cube of size k × k × k, which consists of unit cubes. Two unit cubes are considered neighbouring, if…
CF [题意]:圆形球场有n个门,Allen想要进去看比赛.Allen采取以下方案进入球场:开始Allen站在第一个门,如果当前门前面有人Allen会花费单位时间走到下一个门,如果没人Allen从这个门就进去了.球场的每个门,每单位时间可以进去一个人.问Allen最终是从哪个门进入球场的? [分析]:我们可以发现是有规律的.我们假设第i个门有a个人,Allen第x圈可以从此进入,那么有:x∗n+i=a→x=abs(a−i)/n,所以第一个最小圈数进入的那个门就是答案. [代码]: #includ…
[链接]:CF/4892 [题意]: 一个人解决n个问题,这个问题的值比k小, 每次只能解决最左边的或者最右边的问题 解决了就消失了.问这个人能解决多少个问题. [代码]: #include<bits/stdc++.h> #define PI acos(-1.0) #define pb push_back #define F first #define S second #define debug puts #define setp cout << fixed << s…
题目传送门:CF 题目大意: 给定一个\(n\times m\)的表格\((n\leqslant 20,m\leqslant 10^5)\) 每个表格中有\(0/1\),每次可以将一行或者一列翻转,问表格中最少有多少个1 首先\(n\)很小,状压是肯定躲不掉了-- 然后我们发现,只要确定了翻转一些行,那么答案必然唯一确定(每列取\(\min\{Num_0,Num_1\}\)) 于是我们设\(f[i]\)表示翻转行状态为\(i\)的答案 统计答案的时候,相同状态的列是可以合并的,所以我们设\(C[…
描述 Most people know that the binary operations. Do you know the binary mod and divide? Now give the Binary number N and a integer number M ,Can you tell me the answer of N%(2^M) and N/(2^M)? 输入 Input contains multiple test cases. The first line of ea…
B2. Character Swap (Hard Version) This problem is different from the easy version. In this version Ujan makes at most 2…
题目链接:http://codeforces.com/contest/1204/problem/D2 题目是给定一个01字符串,让你尽可能多地改变1变为0,但是要保证新的字符串,对任意的L,R使得Sl,Sl+1,Sl+2...Sr的最长不递减子序列长度保持不变,求新的串s. dp思路,从前往后遍历串s. 1 . 遇到s[ i ] = 0 是不能改变的,因为从i到n的最长不递减子序列必定是以s[ i ] = 0为起点的,改变之后会减少长度. 2 . 遇到s[ i ] = 1.我们考虑如果变为0,首…
题意:给你两个长度为\(n\)的01串\(s\)和\(t\),可以选择\(s\)的前几位,取反然后反转,保证\(s\)总能通过不超过\(3n\)的操作得到\(t\),输出变换总数,和每次变换的位置. 题解:构造题一定要充分利用题目所给的条件,对于\(s\)中的某一位i,假如它和\(t\)中的对应位置不同,我们先对前i个字符取反反转,然后再对第一个字符取反反转(就选了一个,反不反都无所谓),在取前i个位置取反反转,这样,我们就将第i个位置变换了,消耗了3次操作.这样就一定能保证在\(3n\)之内完…
题目链接 很多小的细节都没想到... #include <cstdio> #include <cstring> #include <iostream> #include <vector> using namespace std; ]; ]; int main() { ,j; scanf("%d",&n); ;i < n;i ++) { scanf("%d",&p[i]); ) flag = ; }…
水题.好久没有写过优化搜索题了. #include <cstdio> #include <cstring> #include <iostream> #include <vector> using namespace std; ][]; ][]; ][]; int judge(int rx,int ry,int lx,int ly) { int i,j; for(i = lx;i <= rx;i ++) { for(j = ly;j <= ry;j…
题目大意: 平面上有n个点,两两不同.现在给出二叉树的定义,要求树边一定是从上指向下,即从y坐标大的点指向小的点,并且每个结点至多有两个儿子.现在让你求给出的这些点是否能构成一棵二叉树,如果能,使二叉树的树边长度(欧几里德长度)总和最小,输出这个总和.如果不能,输出-1.答案与标准答案相差1e-6内都认为是正确的. 算法讨论: 起初是这样想的,肯定是MCMF,费用是距离,然后流量一开始我是这样搞的:从父亲向儿子连流量为2的边.但是你会发现这样有一个问题,就是如果某个结点如果真的有两个儿子的话,那…
某变换好题.不过听说还有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 首先发…
题意: https://www.cnblogs.com/cjyyb/p/9065801.html 题解:…