77分,求助玄关
查看原帖
77分,求助玄关
873466
sinzo楼主2024/12/3 22:30
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
const int N=19;
int a[N],b[N],c[N],d[N],e[N],g[N];
int n,k,m,ans,mn=114514;
void tx(int op)
{
	int ans=0;
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<40;j++)
		{
			ans+=(op>>j&1);
			//cout<<(op>>j&1)<<' '<<ans<<endl;
			
		}
		c[i]^=op;
		c[i]^=op>>1;
		c[i]^=op<<1;
		c[i]&=(1<<n)-1;
		c[i+1]^=op;
		g[i]=op;
		op=c[i];
		
	}
	if(op==0&&ans<mn)
	{
		for(int i=0;i<=m;i++)e[i]=g[i];
		mn=ans;
	}
}
void f(int x)
{
	for(int i=0;i<1<<x;i++)
	{
		for(int i=0;i<=m;i++)c[i]=a[i];
		tx(i);
	}
}
signed main()
{
	ios::sync_with_stdio(0);
	
	cin>>n>>m;
	for(int i=0;i<m;i++)
	{
		int t=0;
		for(int j=0;j<n;j++)
		{
			int x;
			cin>>x;
			if(x)t+=1<<j;
		}
		a[i]=t;
	}
	f(n);
	//cout<<mn;
	
	if(mn==114514)
	{
		cout<<"IMPOSSIBLE";
		return 0;
	}
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
		{
			cout<<(e[i]>>j&1)<<' ';
		}
		cout<<endl;
	}
	//*/
	return 0;
	
}
/*
4 4 	 
1 0 0 1 	 
0 1 1 0 	 
0 1 1 0 	 
1 0 0 1

*/
2024/12/3 22:30
加载中...