#include<bits/stdc++.h>
using namespace std;
set<int> se;
char s[3010][3010],t[3010],maxx[3010],minn[3010][3010];
int n,m;
bool flag;
bool cmp1(char a,char b){
return a<b;
}
bool cmp2(char a,char b){
return a>b;
}
int check(int x){
if(x==1) return 1;
for(int i=1;i<=m;i++){
if(t[i]>maxx[i]) return 1;
if(t[i]<maxx[i]) return 2;
}
return 3;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) cin>>t[j];
sort(t+1,t+1+n,cmp1);
for(int j=1;j<=m;j++) s[i][j]=t[j];
sort(t+1,t+1+n,cmp2);
for(int j=1;j<=m;j++) minn[i][j]=t[j];
int tt=check(i);
if(tt=1){
for(int j=1;j<=m;j++) maxx[j]=t[j];
se.clear();
se.insert(i);
}
if(tt=3) se.insert(i);
}
for(int i=1;i<=n;i++){
if(se.find(i)!=se.end() && se.size()==1){
flag=1;
for(int k=1;k<=n;k++){
if(k==i) continue;
for(int j=1;j<=m;j++){
if(s[i][j]>minn[k][j]){
flag=0;
break;
}
}
}
if(flag) cout<<1;
else cout<<0;
}else{
flag=1;
for(int j=1;j<=m;j++){
if(s[i][j]>maxx[j]){
flag=0;
cout<<0;
break;
}
if(s[i][j]<maxx[j]){
flag=0;
cout<<1;
break;
}
}
if(flag) cout<<0;
}
}
return 0;
}
调了很久 但不知道哪里错了
码风丑