题目:[NOIP2023] 词典
#include <bits/stdc++.h>
using namespace std;
int n, m, c[30];
string s[3010], v[3010];
void fffssso(int l, int r) {
if(l==r) return ;
fffssso(l, (l+r)/2);
fffssso((l+r)/2+1, r);
int a = l, b = (l+r)/2+1;
while(a<=(l+r)/2&&b<=r) {
if(s[a]<s[b]) { v[a+b-(l+r)/2-1] = s[a]; a++; }
else if(s[a]>=s[b]) { v[a+b-(l+r)/2-1] = s[b]; b++; }
}
while(a<=(l+r)/2) { v[a+b-(l+r)/2-1] = s[a]; a++; }
while(b<=r) { v[a+b-(l+r)/2-1] = s[b]; b++; }
for(int i=l; i<=r; i++)
s[i] = v[i];
}
void df(int q) {
for(int i=0; i<m; i++)
c[s[q][i]-'a']++;
int u = 0;
for(int i=26-1; i>=0; i--) {
if(c[i]>0)
for(int j=1; j<=c[i]; j++) {
s[q][u] = i+'a';
u++;
}
c[i] = 0;
}
}
int main() {
scanf("%d%d", &n, &m);
for(int i=1; i<=n; i++) {
cin >> s[i];
df(i);
}
fffssso(1, n);
for(int i=1; i<=n; i++) {
for(int j=1; j<=m/2; j++)
swap(s[i][j-1], s[i][m-j]);
if(i==1) {
if(s[i]<=s[i+1]) printf("1");
else printf("0");
} else {
if(s[i]<=s[1]) printf("1");
else printf("0");
}
for(int j=1; j<=m/2; j++)
swap(s[i][j-1], s[i][m-j]);
}
return 0;
}
样例过了,0分,没看出来哪里不对