admin管理员组

文章数量:1606936

题目链接:Distinctive Character


到所有串的不相似度的最大值最小。

其实就是到所有串相似度最小值最大。

所以我们把初始状态拿出来bfs即可。


AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
int d[1<<20],n,k,s,mx,res;	char str[30]; queue<int> q;
signed main(){
	cin>>n>>k;	memset(d,-1,sizeof d);
	for(int i=1,tmp;i<=n;i++){
		tmp=0;	scanf("%s",str);
		for(int j=0;j<k;j++) if(str[j]=='1') tmp|=(1<<j);
		d[tmp]=0;	q.push(tmp);
	}
	while(q.size()){
		int u=q.front();	q.pop();
		for(int i=0;i<k;i++){
			int now=u^(1<<i);		
			if(d[now]==-1){
				d[now]=d[u]+1;	q.push(now);
				if(d[now]>mx)	mx=d[now],res=now;
			}
		}
	}
	for(int i=0;i<k;i++)	printf("%d",(res>>i&1));
	return 0;
}

本文标签: distinctivecharacter