思路
一开始想复杂了
其实就是考虑 , 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;
}