4^100=10^8=1亿,加上了O2还是超时...
#include<bits/stdc++.h>
#define int long long
using namespace std;
int k,n;
string writter[111];
map<string,int>name;
char ans[111][111];
bool check(char a) { return (a >= 'a' && a <= 'z') || (a >= 'A' && a <= 'Z'); }
inline string readstr() {
string s;
char aa = getchar();
while (!check(aa)) aa = getchar();
while (check(aa)) s += aa, aa = getchar();
return s;
}
bool a_is_bigger_than_b(string a,string b)
{
if(a.size()<b.size())
{
return 0;
}
else if(a.size()>b.size())
{
return 1;
}
else
{
for(int i=0;i<a.size();i++)
{
if(a[i]>b[i])
{
return 1;
}
else if(a[i]<b[i])
{
return 0;
}
}
}
}
signed main()
{
memset(ans,'?',sizeof(ans));
cin>>k>>n;
for(int i=1;i<=n;i++)
{
ans[i][i]='B';
}
for(int i=1;i<=n;i++)
{
string s;
// cin>>s;
s=readstr();
name[s]=i;
}
for(int i=1;i<=k;i++)
{
for(int j=1;j<=n;j++)
{
// cin>>writter[j];
writter[j]=readstr();
}
for(int j=n;j>=2;j--)
{
// cout<<writter[j-1]<<" "<<writter[j]<<" "<<a_is_bigger_than_b(writter[j-1],writter[j])<<endl;
int wei=0;
for(int k=j-1;k>=1;k--)
{
// cout<<writter[k]<<" "<<writter[j]<<endl;
if(a_is_bigger_than_b(writter[k],writter[j]))
{
wei=k;
break;
}
}
// cout<<wei<<endl;
for(int k=wei+1;k<=n;k++)
{
for(int o=1;o<=wei;o++)
{
ans[name[writter[o]]][name[writter[k]]]='0';
ans[name[writter[k]]][name[writter[o]]]='1';
}
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cout<<ans[i][j];
}
cout<<endl;
}
}