题意:一个$n\times m$的数表,数值$\in[0,4)$,你可以任意次选择一行或一列$+1,\text{mod }4$,要最小化所有数的和

因为$n\leq10$,所以数表可以看成$m$个$n$位$4$进制数$a_{1\cdots m}$,以下使用不进位加法

定义$f(x)=\min\limits_{i=0}^3\left(x+(i\cdots i)_4\right)$,如果确定了行的方案$s$,答案就是$\sum\limits_if(a_i+s)$

记$c_x$为$x$在$a_{1\cdots m}$中的出现次数,$\text{ans}(s)=\sum\limits_xc_xf(x+s)=\sum\limits_{a+b=s}c_{-a}f(b)$,是一个高维循环卷积

高维卷积需要用到高维FFT,根据wiki,只需在每一维分别dft即可,时间复杂度$O(n4^n)$

#include<stdio.h>
#include<algorithm>
using namespace std;
typedef long long ll;
const int mod=998244353,inf=2147483647;
int mul(int a,int b){return(ll)a*b%mod;}
int ad(int a,int b){return(a+=b)>=mod?a-mod:a;}
int pow(int a,int b){
	int s=1;
	while(b){
		if(b&1)s=mul(s,a);
		a=mul(a,a);
		b>>=1;
	}
	return s;
}
int*w[5],iN;
void pre(){
	int i,j,t;
	for(i=2;i<=4;i<<=1){
		w[i]=new int[i+1];
		t=pow(3,(mod-1)/i);
		w[i][0]=1;
		for(j=1;j<=i;j++)w[i][j]=mul(w[i][j-1],t);
	}
	iN=pow(4,mod-2);
}
void dft4(int*a,int sh,int on){
	#define a(i) a[(i)<<sh]
	const int N=4;
	int i,j,k,t;
	swap(a(1),a(2));
	for(i=2;i<=N;i<<=1){
		for(j=0;j<N;j+=i){
			for(k=0;k<i>>1;k++){
				t=mul(a(i/2+j+k),w[i][on==1?k:i-k]);
				a(i/2+j+k)=ad(a(j+k),mod-t);
				a(j+k)=ad(a(j+k),t);
			}
		}
	}
	if(on==-1){
		for(i=0;i<N;i++)a(i)=mul(a(i),iN);
	}
	#undef a
}
int n,N;
void dft(int*a,int on){
	int i,j;
	for(j=0;j<n;j++){
		for(i=0;i<N;i++){
			if(!(i>>j*2&3))dft4(a+i,j*2,on);
		}
	}
}
int a[10010];
int c[1048576],f[1048576];
int t[4];
int main(){
	int m,i,j,x,res;
	scanf("%d%d",&n,&m);
	N=1<<n*2;
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			scanf("%d",&x);
			a[j]=a[j]<<2|x;
		}
	}
	for(i=1;i<=m;i++)c[a[i]]++;
	reverse(c,c+N);
	for(i=0;i<N;i++){
		t[0]=t[1]=t[2]=t[3]=0;
		for(j=0;j<n;j++)t[i>>j*2&3]++;
		f[i]=min(min(t[1]+2*t[2]+3*t[3],t[0]+2*t[1]+3*t[2]),min(t[3]+2*t[0]+3*t[1],t[2]+2*t[3]+3*t[0]));
	}
	pre();
	dft(c,1);
	dft(f,1);
	for(i=0;i<N;i++)c[i]=mul(c[i],f[i]);
	dft(c,-1);
	res=inf;
	for(i=0;i<N;i++)res=min(res,c[i]);
	printf("%d",res);
}

[xsy3132]数表的更多相关文章

  1. BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]

    3529: [Sdoi2014]数表 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1399  Solved: 694[Submit][Status] ...

  2. C++ 虚函数表解析

    转载:陈皓 http://blog.csdn.net/haoel 前言 C++中 的虚函数的作用主要是实现了多态的机制.关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实 ...

  3. n维数组实现(可变参数表的使用)

    首先先介绍一下可变参数表需要用到的宏: 头文件:#include<cstdarg> void va_start( va_list arg_ptr, prev_param ); type v ...

  4. C++ 多态、虚函数机制以及虚函数表

    1.非virtual函数,调用规则取决于对象的显式类型.例如 A* a  = new B(); a->display(); 调用的就是A类中定义的display().和对象本体是B无关系. 2. ...

  5. C++迟后联编和虚函数表

    先看一个题目: class Base { public: virtual void Show(int x) { cout << "In Base class, int x = & ...

  6. C++ 知道虚函数表的存在

    今天翻看陈皓大大的博客,直接找关于C++的东东,看到了虚函数表的内容,找一些能看得懂的地方记下笔记. 0 引子 类中存在虚函数,就会存在虚函数表,在vs2015的实现中,它存在于类的头部. 假设有如下 ...

  7. C++虚函数和虚函数表

    前导 在上面的博文中描述了基类中存在虚函数时,基类和派生类中虚函数表的结构. 在派生类也定义了虚函数时,函数表又是怎样的结构呢? 先看下面的示例代码: #include <iostream> ...

  8. C++ Daily 《5》----虚函数表的共享问题

    问题: 包含一个以上虚函数的 class B, 它所定义的 对象是否共用一个虚函数表? 分析: 由于含有虚函数,因此对象内存包含了一个指向虚函数表的指针,但是这个指针指向的是同一个虚函数表吗? 实验如 ...

  9. C++虚函数表

    大家知道虚函数是通过一张虚函数表来实现的.在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承.覆盖的问题,其内容真是反应实际的函数.这样,在有虚函数的类的实例中,这个表分配在了这个实例的内存中 ...

随机推荐

  1. C#中集合ArrayList与Hashtable的使用

    C#中集合ArrayList与Hashtable的使用 http://blog.csdn.net/linukey/article/details/42506819 ArrayList: 一. 注意事项 ...

  2. 最近的思考x

    数据结构与文件格式: 自我管理与成长管理: 静态分析与动态分析.

  3. centos7.2(一)vultr服务器购买和开通端口

    https://vultr.me/52.html 之前我们已经介绍了如何购买 Vultr 以及如何使用支付宝对 Vultr 进行充值,相关教程: VULTR 购买教程 2018 年最新图文版 VULT ...

  4. BZOJ 4903: [Ctsc2017]吉夫特 数论+dp

    思路很巧妙的一道题 ~ 这个应该不完全是正解,复杂度约为 $O(3\times 10^8)$,有时间再研究研究正解. 首先,最裸的暴力是按照权值从小到大枚举每一个数,然后枚举后面的数来更新方案数,是 ...

  5. 用户管理命令——useradd、paaswd、who、w

    1.useradd和passwd命令: 其中:useradd用来添加用户,passwd用来添加用的的密码: 用户创建后可以用用户名和密码进行登录. 2.passwd:密码的更改: (1)普通用户: 只 ...

  6. Apache ServiceComb Pack 微服务分布式数据最终一致性解决方案

    https://github.com/OpenSagas-csharp/servicecomb-pack-csharp Saga基本使用指南 使用前置条件说明 如果还有同学对Saga还不甚了解的同学, ...

  7. css实现块级元素水平垂直居中的方法?

    父级给相对定位,子级给绝对定位,margin设置为auto,上下左右值设为0. 父级给相对定位,子级给绝对定位,设置left和top为50%,再向左和向上移动负的子级一半. 父级设置display:f ...

  8. Nginx+Php-fpm运行原理 代理与反向代理

    一.代理与反向代理 现实生活中的例子 1.正向代理:访问google.com 如上图,因为google被墙,我们需要vpnFQ才能访问google.com.Virtual Private Networ ...

  9. Spring中静态方法中使用@Resource注解的变量

    开发中,有些时候可能会工具类的静态方法,而这个静态方法中又使用到了@Resource注解后的变量.如果要直接使用 Utils.staticMethod(),项目会报异常:如果不直接使用,还要先 new ...

  10. AttributeError: module ‘select’ has no attribute 'epoll’

    场景:mac 下导入的 ‘select’ 包 import select,然后在 主函数 中创建的 epoll 对象 epl = select.epoll(),运行报错如下 Traceback (mo ...