90pts求调,红温了>﹏<
查看原帖
90pts求调,红温了>﹏<
595684
AceTaffy812楼主2024/12/12 12:20

想不通,求大佬帮助

#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;
}
2024/12/12 12:20
加载中...