633E Binary Table
分析
我们发现n特别小,所以可以从这里入手
我们记录出所有列中某一种状态的列有多少个
我们再记录出每种列最少有多少个1(原来的1的个数和取反后的个数去最小值)
于是我们可以得出对于所有列异或一个数的答案
(实际就是对于每一行有一个全异或1或不异或的操作,将所有行压起来)
于是我们不难得到式子$Ans_i = \sum a_j * b_{j^i}$
直接fwt即可
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define int long long
string s[];
int a[],b[],n,m,N;
inline void fwt(int a[],int f){
int i,j,k;
for(i=;i<N;i<<=)
for(j=;j<N;j+=(i<<))
for(k=;k<i;k++){
int x=a[j+k],y=a[i+j+k];
a[j+k]=x+y,a[i+j+k]=x-y;
if(f==-)a[j+k]/=,a[i+j+k]/=;
}
}
signed main(){
int i,j,k;
scanf("%lld%lld",&n,&m);
N=(<<n);
for(i=;i<=n;i++)cin>>s[i];
for(i=;i<m;i++){
k=;
for(j=;j<=n;j++)k=(k<<)+(s[j][i]-'');
a[k]++;
}
for(i=;i<N;i++)b[i]=b[i>>]+(i&);
for(i=;i<N;i++)b[i]=min(b[i],n-b[i]);
fwt(a,),fwt(b,);
for(i=;i<N;i++)a[i]=a[i]*b[i];
fwt(a,-);
int Ans=1e9+;
for(i=;i<N;i++)Ans=min(Ans,a[i]);
cout<<Ans;
return ;
}
633E Binary Table的更多相关文章
- CROC 2016 - Final Round [Private, For Onsite Finalists Only] C. Binary Table FWT
C. Binary Table 题目连接: http://codeforces.com/problemset/problem/662/C Description You are given a tab ...
- 【CF662C】Binary Table(FWT)
[CF662C]Binary Table(FWT) 题面 洛谷 CF 翻译: 有一个\(n*m\)的表格(\(n<=20,m<=10^5\)), 每个表格里面有一个\(0/1\), 每次可 ...
- 【CF662C】Binary Table 按位处理
[CF662C]Binary Table 题意:给你一个$n\times m$的01网格,你可以进行任意次操作,每次操作是将一行或一列的数都取反,问你最多可以得到多少个1? $n\le 20,m\le ...
- [CF662C Binary Table][状压+FWT]
CF662C Binary Table 一道 FWT 的板子-比较难想就是了 有一个 \(n\) 行 \(m\) 列的表格,每个元素都是 \(0/1\),每次操作可以选择一行或一列,把 \(0/1\) ...
- CF-1440C2 Binary Table (Hard Version) (构造,模拟)
Binary Table (Hard Version) 题意 \(n*m(2\le n,m\le 100)\) 的01矩阵,每次可以选择一个宽度为2的子矩阵,将四个位置中的任意3个进行翻转,即0变1, ...
- CF662C Binary Table【FWT】
CF662C Binary Table 题意: 给出一个\(n\times m\)的\(01\)矩阵,每次可以反转一行或者一列,问经过若干次反转之后,最少有多少个\(1\) \(n\le 20, m\ ...
- 「CF662C」 Binary Table
「CF662C」 Binary Table 题目链接 题目所给的 \(n\) 很小,于是我们可以考虑这样一种朴素做法:暴力枚举第 \(i\) 行是否翻转,这样每一行的状态就确定了,这时取每一列 \(0 ...
- Codeforces663E Binary Table(FWT)
题目 Source http://codeforces.com/contest/663/problem/E Description You are given a table consisting o ...
- [Codeforces]663E Binary Table
某变换好题.不过听说还有O(2^n*n^2)DP的…… Description 给定一个n*m的01矩阵,你可以选择对任意行和任意列取反,使得最终“1”的数量尽量少. Input 第一行两个整数n,m ...
随机推荐
- Synergy CORTEX M 启动流程
1.启动文件“startup_S7G2.c” 中断向量表地址指针:“0xe000ed08” /* Vector table. */ BSP_DONT_REMOVE const exc_ptr_t __ ...
- 【Leetcode 167】Two Sum II - Input array is sorted
问题描述:给出一个升序排列好的整数数组,找出2个数,它们的和等于目标数.返回这两个数的下标(从1开始),其中第1个下标比第2个下标小. Input: numbers={2, 7, 11, 15}, t ...
- Tomcat原理的一点看法
版权声明:本文为博主原创文章,未经博主允许不得转载. 首先,运行tomcat之前,先写一个html页面, 再写一个serlvet程序 配置文件如下: 那么程序是怎样运行的呢? 浏览器发起请求到 --& ...
- Arduino+A4988驱动两相四线步进电机
先吐槽一下,在某宝买东西这么多年碰到的不靠谱的卖家也没这几天多.丝杆发短,42电机只有32大,碳杆上的鱼眼粘的没法再歪了还死紧……所以组装还得几天.于是先玩了一下DC-DC降压模块和A4988,规划了 ...
- bzoj 3867: Nice boat
题意:给定一个正整数序列,操作是1.区间赋值,2.区间大于x的数与x取gcd,最后输出操作后的序列 用平衡树维护相同数组成的连续段,每次操作至多增加两个连续段,操作2记录一下区间最小值然后暴力修改,每 ...
- 数据结构与算法JavaScript描述——栈
栈就是和列表类似的一种数据结构,它可用来解决计算机世界里的很多问题. 栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现. 栈的使用遍布程序语言实现的方方面面,从表 ...
- ROS HTB限速失败原因分析和需注意事项
要想做限速,必须要知道以下几点: 首先要知道自己要限制什么的速度,谁的速度,于是需要用的标记,即Mangle. 其次要知道怎么限速,是限制上传,还是下载? 最后要知道所做的限速是否成功,即需要知道如何 ...
- MapReduce启动的Map/Reduce子任务简要分析
对于Hadoop来说,是通过在DataNode中启动Map/Reduce java进程的方式来实现分布式计算处理的,那么就从源码层简要分析一下hadoop中启动Map/Reduce任务的过程. ...
- 第十章 Secret & Configmap (中)
10.3 在Pod中使用Secret 10.3.1 Volume方式 apiVersion: v1 kind: Pod metaata: name: mypod spec: containers: - ...
- TCP 三次握手 四次握手
http://blog.chinaunix.net/uid-22312037-id-3575121.html http://www.centos.bz/2012/08/tcp-establish-cl ...