从结果来看,某个字符串a前面所有的字符串b都满足b+a < a+b,否则就应该将它们交换位置,同理a后面所有的b应满足 a +b < b+a…反之若满足这个前提就没有任何字符串能替代当前字符串的位置了所以为充分必要条件.只需在sort的cmp函数中交待这个逻辑就OK
#include<iostream>
#include<algorithm>
#include<string.h>
#include<vector>
using namespace std;
vector<string>a;
bool cmp(string &a,string &b) {
return a+b < b+a;
}
int main() {
int n,i,j;
string s;
cin>>n;
a.resize(n);
for (i = 0;i < n;i++) {
cin>>a[i];
}
sort(a.begin(),a.end(),cmp);
int flag;
for (i = 0;i < n;i++) {
if (stoi(a[i]) != 0) {
break;
}
}
if (i == n) {
cout<<0;
return 0;
}
cout<<stoi(a[i]);
i++;
for (;i < n;i++) {
cout<<a[i];
}
return 0;
}