考虑对每个设置为1且唯一
那么我们发现对于所有的状态都是确定且唯一的
那么我们对于每个点假设它为1且为该列唯一
对于除它之外的点的状态进行存储
又由于这个值过于大
我们考虑使用哈希存储
那么出现次数最多的值即为答案
点击查看代码
map<ull,int>cnt;
map<ull,pii>pos;
void solve(){
cnt.clear(),pos.clear();
int n,m;cin>>n>>m;
vector<vector<int>>a(n+1,vector<int>(m+1));
string s;
for(int i=1;i<=n;i++){
cin>>s;
for(int j=1;j<=m;j++)a[i][j]=s[j-1]-'0';
}
for(int j=1;j<=m;j++){
ull H=0;
for(int i=1;i<=n;i++)H=H*B+a[i][j];
for(int i=1;i<=n;i++){
ull H0=H;
if(a[i][j]==0)H0+=pw[n-i];
else H0-=pw[n-i];
if(!cnt[H0])pos[H0]=make_pair(i,j);
cnt[H0]++;
}
}
int f1=0;ull mx=0;
for(auto it:cnt){
if(!f1){
mx=it.first;
f1=1;continue;
}
if(it.second>cnt[mx])mx=it.first;
}
cout<<cnt[mx]<<'\n';
int x=pos[mx].first,y=pos[mx].second;
for(int i=1;i<=n;i++){
if((i==x)^a[i][y])cout<<1;
else cout<<0;
}
cout<<'\n';
}