思路

一开始想复杂了
其实就是考虑 , num1 | num2 大 还是 num2 | num1 大
然后基于此, 进行运算符重载即可


天下贪心, 无非围绕排序展开

int above(const string &a ,const string & b)
{
    if (a.size() > b.size()) return 1;
    else if (a.size() == b.size()) 
    {
        for (int i = 0 ; i <a.size() ; i ++)
        {
            if(a[i] > b[i])
                return 1 ;
            else if (a[i] < b[i]) return 0;
        }
    } 
    return 0;
}

然后进行排序

    sort(a.begin(), a.end(), [](const string &a, const string &b) {
        string n1 = a + b ;
        string n2 = b + a ;
        return above(n1 , n2);
    });

ac 代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int inf = INT_MAX;
typedef pair<int, int> pii;
typedef priority_queue<int, vector<int>, greater<int>> small_heap;
#define int long long
int above(const string &a ,const string & b)
{
    if (a.size() > b.size()) return 1;
    else if (a.size() == b.size()) 
    {
        for (int i = 0 ; i <a.size() ; i ++)
        {
            if(a[i] > b[i])
                return 1 ;
            else if (a[i] < b[i]) return 0;
        }
    } 
    return 0;
}
int32_t main()
{
    int n;
    cin >> n;
    vector<string> a(n);
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    sort(a.begin(), a.end(), [](const string &a, const string &b) {
        string n1 = a + b ;
        string n2 = b + a ;
        return above(n1 , n2);
    });
    for (auto &t : a)
    {
        cout << t <<"";
    }
    
    return 0;
}