考慮對每個設定為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';
}