首页 > 其他 > 详细

洛谷P1012 拼数(水题 字符串

时间:2020-01-11 15:38:51      阅读:65      评论:0      收藏:0      [点我收藏+]

题目描述

设有nn个正整数(n≤20)(n20),将它们联接成一排,组成一个最大的多位整数。

例如: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 }

 

洛谷P1012 拼数(水题 字符串

原文:https://www.cnblogs.com/h404nofound/p/12179921.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!