洛谷P1012 拼数(水题 字符串

题目描述

设有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 }

 

posted @ 2020-01-11 14:57  小草今天又在摸鱼吗  阅读(192)  评论(0编辑  收藏  举报