当前位置: 首页 > article >正文

CF662C Binary Table

CF662C Binary Table

洛谷CF662C Binary Table

题目大意

有一行 n n n m m m列的表格,每个元素都是 0 / 1 0/1 0/1,每次操作可以选择一行或一列,把 0 / 1 0/1 0/1翻转。请问经过若干次操作后,表格中最少有多少个 1 1 1

1 ≤ n ≤ 20 , 1 ≤ m ≤ 1 0 5 1\leq n\leq 20,1\leq m\leq 10^5 1n20,1m105


题解

前置知识:快速沃尔什变换( F W T FWT FWT

我们将每一列看作一种状态,则总共有 m m m种状态。

a i a_i ai表示状态 i i i出现的次数, b i b_i bi表示 i i i的二进制位中 0 0 0的位数和 1 1 1的位数的最小值。

f k f_k fk表示翻转状态为 k k k时的答案,则

f k = ∑ i = 0 2 n − 1 a i × b i ⊕ k f_k=\sum\limits_{i=0}^{2^n-1}a_i\times b_{i\oplus k} fk=i=02n1ai×bik

变换得

f k = ∑ i ⊕ j = k a i × b j f_k=\sum\limits_{i\oplus j=k}a_i\times b_j fk=ij=kai×bj

这就是异或卷积,直接用 F W T FWT FWT即可。

时间复杂度为 O ( n ⋅ 2 n ) O(n\cdot 2^n) O(n2n)

code

#include<bits/stdc++.h>
using namespace std;
int n,m,v[100005],cnt[1<<20];
long long ans=1e18,a[1<<20],b[1<<20],c[1<<20];
int gt(){
	char ch=getchar();
	while(ch!='0'&&ch!='1') ch=getchar();
	return ch-'0';
}
void fwt(long long *w,int fl){
	for(int s=2;s<=1<<n;s<<=1){
		int mid=s>>1;
		for(int v=0;v<1<<n;v+=s){
			for(int i=0;i<mid;i++){
				long long t1=w[v+i],t2=w[v+mid+i];
				w[v+i]=t1+t2;
				w[v+mid+i]=t1-t2;
				if(fl==-1){
					w[v+i]/=2;
					w[v+mid+i]/=2;
				}
			}
		}
	}
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			int t=gt();
			v[j]|=(t<<i-1);
		}
	}
	for(int i=1;i<1<<n;i++){
		cnt[i]=cnt[i-(i&(-i))]+1;
		b[i]=min(cnt[i],n-cnt[i]);
	}
	for(int i=1;i<=m;i++) ++a[v[i]];
	fwt(a,1);fwt(b,1);
	for(int i=0;i<1<<n;i++){
		c[i]=a[i]*b[i];
	}
	fwt(c,-1);
	for(int i=0;i<1<<n;i++){
		ans=min(ans,c[i]);
	}
	printf("%lld",ans);
	return 0;
}

http://www.kler.cn/a/15733.html

相关文章:

  • 使用OpenFeign实现HTTP调用的最简单案例
  • 使用 Grafana api 查询 Datasource 数据
  • 网络安全SQL初步注入2
  • 微信小程序设置屏幕安全距离
  • Spring 4.3 源码导读
  • 计算机网络WebSocket——针对实习面试
  • nvm安装使用详解,附gnvm介绍
  • 史上最全的接口测试,吐血整理从零到接口自动化实战...
  • 1992-2022年31省人均gdp/各省人均地区生产总值
  • @PostConstruct注解和@PreDestroy注解
  • 【AI生产力工具】Upscale.media:用AI技术提升照片质量,让你的作品更出色
  • 【LeetCode股票买卖系列:121. 买卖股票的最佳时机 | 一次遍历 | 暴力递归=>记忆化搜索=>动态规划】
  • 系统集成项目管理工程师 笔记(第19章:项目收尾管理)
  • 【5G RRC】RSRP、RSRQ以及SINR含义、计算过程详细介绍
  • 如何在Linkedin领英上找客户
  • VsCode镜像下载(国内镜像源,高速秒下)
  • 博世中国创新软件开发中心 BCSC
  • vue生命周期代码示范--Vue基本介绍--MVVM-示意图--数据渲染--事件绑定--修饰符--组件化--和全部代码示范
  • Python高级函数1:使用 map()、reduce()、filter()、zip() 和 enumerate() 简化代码
  • 【云台】开源版本SimpleBGC的电机驱动与控制方式
  • iVX开发中整理的常见问题与回答(三)
  • 虹科案例 | 如何通过智能、非接触式测量解决方案,提高起重机的安全和效率?
  • ESET NOD32 互联网安全软件和防毒软件 -简单,可靠的防护。
  • 优思学院|做质量管理有七大工具,都是什么?
  • 训练数据集处理
  • SpringMVC实现文件上传和下载和Json的简单实用