思路:
比较a+b和b+a的大小,然后排序,较小的放到前面就好了,每一部分最小,总体最小。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 100100;
string a[maxn];
bool cmp(string a,string b)
{
return a+b<b+a;
}
int main(void)
{
int n,i,j;
cin>>n;
for(i=0;i<n;i++) cin>>a[i];
sort(a,a+n,cmp);
string ss="";
for(i=0;i<n;i++) ss+=a[i];
int len=ss.length();
for(i=0;i<len&&ss[i]=='0';i++) ;
if(i==len){
cout<<0<<endl;
return 0;
}
for(;i<len;i++) cout<<ss[i];
return 0;
}