Note
- 贪心
- 卡了好久…(枯了)
- 不是按照字典序排列就可以的,必须保证两个字符串构成的数字是最小的才行,所以cmp函数写成 return a + b < b + a 的形式,保证它排列按照能够组成的最小数字的形式排列。
- 注意:如果移出了0之后发现s.length() == 0了,说明这个数是0,那么要特别地输出这个0,否则会什么都不输出。
Code:
#include<bits/stdc++.h>
using namespace std;
bool compare(string a,string b){
return a+b<b+a;
}
string str[10010];
int main(){
#ifndef ONLINE_JUDGE
freopen("data.txt","r",stdin);
#endif
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
cin>>str[i];
sort(str,str+n,compare);
string res="";
for(int i=0;i<n;i++)
res+=str[i];
int p=0;
while(res[p]=='0') p++;
res=res.substr(p);
if(res.length()==0) cout<<0;
else cout<<res;
return 0;
}