题意:一个$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. wordpress导航当前页面菜单高亮显示如何操作

    我们在制作wordpress主题时有些客户要求导航在访问某个菜单时,这个菜单项会高亮显示,让用户知道自己正在访问的是哪个菜单下的内容,这个要如何实现呢?wordpress早就为你想好了,.curren ...

  2. 题解 LA2911

    题目大意 多组数据,每组数据给定整数 \(m,p,a,b\),满足 \(a>0\),\(2\leq p\leq12\) 且 \(p\) 为偶数.要求求出一列数 \(x_1,x_2,\cdots, ...

  3. react hooks沉思录

    将UI组件抽象为状态处理机.分为普通状态和副作用状态. 一.综述 useState:处理函数只改变引用的状态本身:副作用状态:会对引用状态以外的状态和变量进行修改:useReducer:用解藕化的机制 ...

  4. vue.js不仅是一种模式,也是一种工程组织方式

    vue.js不仅是一种模式,也是一种工程组织方式

  5. form设计批量赋值

    data: { list:[], cards: { cardname: "", cardtitle: "", cardtel: "", ca ...

  6. 网络命令——last、lastlog、traceroute、netstat

    1.last命令(查看目前和过去用户的登录信息) 2.lastlog命令(检查某用户上次登录的时间): 3.traceroute命令: 显示数据包到主机间的路径. 4.netstat命令: 查看本机已 ...

  7. MongoDB主从

    环境示例: 系统:Centos6.6x64 安装目录:/opt/ 主:172.16.15.101 从:172.16.15.102 1.下载安装: # wget https://fastdl.mongo ...

  8. VMware Tools安装后设置自动挂载解决共享文件夹无法显示的问题

    一.  确保成功安装了VMware Tools 二.  使用如下命令 1.apt-get install open-vm-tools 2.vmhgfs-fuse .host:/  /mnt/hgfs  ...

  9. AGC010

    AGC010 A [过水已隐藏] B 这题推完了还是不会/kk真的毒瘤 考虑每次会减少的总和是\(n(n+1)/2\),用原来的和除以这个可以得到操作次数\(m\)(不是整数无解) 再考虑相邻两个数\ ...

  10. Python中的异步任务队列 arq

    引言 最近在用 sanic 写东西,所有涉及到IO阻塞的代码都需要用 aio 的模块,好在近年来 asyncio 生态圈发展的还算不错,该有的都有 ~ 近期业务中 登录/注册 业务涉及的很复杂(涉及到 ...