标签:return 水题 拼数 la int lb ++ 洛谷 string
题目描述
设有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 }
标签:return,水题,拼数,la,int,lb,++,洛谷,string 来源: https://www.cnblogs.com/h404nofound/p/12179921.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。