求调
查看原帖
求调
646208
Hughpig楼主2023/8/26 12:02
#include<bits/stdc++.h>
using namespace std;
int c,n,maxx,ans;
int a[200007];
bool b[300007],vis[20];

void dfs(int x,int p){
	if(p>c/2+1)return;
	//cout<<x<<' ';
	if(b[x]){
		ans=max(ans,c-p);
		//cout<<x<<' ';
		return;
	}
	for(int i=0;i<c;i++){
		if(!vis[i])vis[i]=1,dfs((((x>>i)^1)<<i)+x%(1<<i),p+1),vis[i]=0;
	}
}

void dfs_(int x,int p){
	if(p>c/2+1)return;
	//cout<<x<<' ';
	if(b[x]){
		ans=max(ans,p);
		//cout<<x<<' ';
		//return;
	}
	for(int i=0;i<c;i++){
		if(!vis[i])vis[i]=1,dfs((((x>>i)^1)<<i)+x%(1<<i),p+1),vis[i]=0;
	}
}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>c>>n;
	maxx=(1<<c)-1;
	for(int i=1;i<=n;i++){
		string s;
		cin>>s;
		for(int j=0;j<c;j++)a[i]=(a[i]<<1)+(s[j]=='G');
		b[a[i]]=1;
	}
	for(int i=1;i<=n;i++){
		memset(vis,0,sizeof(vis));
		ans=0;
		dfs(maxx-a[i],0);
		dfs_(a[i],0);
		cout<<ans<<'\n';
	}
	return 0;
}
2023/8/26 12:02
加载中...