想不通,求大佬帮助
#include <bits/stdc++.h>
#define LL long long
#define ULL unsigned long long
#define RI register int
using namespace std;
int n, m;
string s[3005], ss[3005];
bool cmp(string a, string b)
{
return a < b;
}
bool cmpc(char x, char y)
{
return x > y;
}
int main()
{
scanf("%d%d", &n, &m);
if (n == 1)
{
cout << 1;
return 0;
}
for (RI i = 1; i <= n; ++i)
{
cin >> s[i];
ss[i] = s[i];
}
for (RI i = 1; i <= n; ++i) // ss[i] 记录 s[i] 内交换字母后 字典序最大的
{
sort(ss[i].begin(), ss[i].end(), cmpc);
}
sort(ss + 1, ss + 1 + n, cmp); // 对ss数组排序,字典序小的在前面
// 找出s中字典序最小的 s[minn]
int minn = 1;
for (int i = 1; i <= n - 1; ++i)
{
if (s[i] < s[minn])
minn = i;
}
for (RI i = 1; i <= n; ++i) // 遍历 s[i]
{
string temp = s[i];
sort(temp.begin(), temp.end());
if (i == minn)
{
if (temp < ss[2])
{
printf("1");
}
else
{
printf("0");
}
}
else
{
if (temp < ss[1])
{
printf("1");
}
else
{
printf("0");
}
}
}
return 0;
}