思路:
贪心
1.n个整数,字典序最大的在前面,很容易想到这个策略,但是有一组反例:
3 31 39
结果应该是39331,而不是39313。
2.所以我们要改变策略,还是假定AB前面和后面已经有序了,而且AB不影响后面和前面的结果。
3.要A排前面更优,就要AB的字典序比BA的字典序大。
4.总的策略可以按照3的规则排序,然后依次输出就行。
Code:
#include<bits/stdc++.h>
#define js ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
typedef long long ll;
bool cmp(string a,string b) {
string x=a+b,y=b+a;
for(int i=0;i<x.size();++i) {
if(x[i]==y[i]) continue;
return x[i]>y[i];
}
return true;
}
string a[25];
int main() {
js; int n;
cin>>n;
for(int i=1;i<=n;++i) cin>>a[i];
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;++i) cout<<a[i];
cout<<"\n";
return 0;
} 
京公网安备 11010502036488号