洛谷P1012拼数——字符串排序

题目描述

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

例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213

又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613

输入输出格式

输入格式:

第一行,一个正整数n。

第二行,n个正整数。

输出格式:

一个正整数,表示最大的整数

The first glance I saw this problem,it’s so cushy;结果WA了一个点;sad……;

仔细想想才发现问题所在,打个比方:4 和42 两个字符串的前一部分相同,而前半部分相同的字符串,位数小的“<"位数大的,因此在比较中 4<42 ,于是按照我第一次的思路,把大的放在前面,于是得到了424,然而并不是这样,而应该是442,这样组合起来最大。

所以这时用sort对string数组排序时需要手写comp函数,

#include<cstdio>
#include<cmath>
#include<queue>
#include<deque>
#include<vector>
#include<stack>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<string>
#include<iostream>
#define LL long long
using namespace std;
string num[22];
bool cmp(string a,string b){
    return a+b < b+a; 
}
int main(){
    int n;
    scanf("%d",&n);
    for(int i = 1;i <= n;i++)
       cin>>num[i];
    sort(num+1,num+n+1,cmp);
    for(int i = n;i >= 1;i--)
       cout<<num[i];
    return 0;
}

 

posted @ 2017-02-13 10:01  可能是轩轩叭  阅读(192)  评论(0编辑  收藏  举报