题目描述
设有nn个正整数(n≤20)(n≤20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3n=3时,33个整数1313,312312,343343联接成的最大整数为:3433121334331213
又如:n=4n=4时,44个整数77,1313,44,246246联接成的最大整数为:74246137424613
输入 #
3
13 312 343
输出 #1
34331213
今天的最后一水x(就 上午随手开的字符串专题顺手写完了,,),题目挺简单的,,拼凑最大很明显的就是根据字符串字典序排,而不是整数大小(要保证高位的数字尽可能大),,最后一例wa点就是,当一个串是另一个的字串时,需要特判一下,不能只看字典序放。
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int N = 1e3+7; 5 string s[100]; 6 bool cmmp(string a,string b){ 7 int la = a.size(),lb = b.size(); 8 int l = min(la,lb); 9 for(int i = 0;i < l;++i){ 10 if(a[i]>b[i])return 1;//a在b前 1 11 else if(a[i]<b[i])return 0; 12 } 13 if(la>lb){ 14 if(a[lb]>a[0])return 1; 15 else return 0; 16 } 17 else if(la < lb){ 18 if(b[la]>b[0])return 0; 19 else return 1; 20 } 21 return 1; 22 } 23 int main(){ 24 int n;string tp; 25 ios::sync_with_stdio(0); 26 cin>>n; 27 for(int i = 0;i < n;++i)cin>>s[i]; 28 for(int i = 0;i < n;++i){ 29 for(int j = i+1;j < n;++j){ 30 if(cmmp(s[i],s[j])==0){ 31 tp = s[i];s[i] = s[j];s[j] = tp; 32 } 33 } 34 } 35 for(int i = 0;i < n;++i)cout<<s[i];cout<<endl; 36 }