链接:https://ac.nowcoder.com/acm/problem/16783
来源:牛客网
题号:NC16783
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

设有n个正整数(n ≤ 20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613

输入描述:

第一行,一个正整数n。
第二行,n个正整数。

输出描述:

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

输入

3
13 312 343

输出

34331213
示例2

输入

20
921650139 925571586 931563581 923960668 870548039 358493469 371229218 737101511 514654859 185379933 19421244 117259400 301947570 48520742 79303948 222979736 153546206 250582036 106394401 198125223

输出

931563581925571586923960668921650139870548039793039487371015115146548594852074237122921835849346930194757025058203622297973619812522319421244185379933153546206117259400106394401

//本题是贪心问题,主要问题在于什么样的数要放到前面,从中可以找到
//如果s1和s2之间相比较的话,最简单的方式就是将两个拼串尝试后比较即可。
#include <bits/stdc++.h>

using namespace std;

string s[22];

bool comp(string s1, string s2) {
    if (s1+s2>s2+s1) return true;
    return false;
}

int main() {
    int n;
    cin>>n;
    for (int i=1;i<=n;i++) {
        cin>>s[i];
    }
    sort(s+1, s+n+1, comp);
    for (int i=1;i<=n;i++) {
        cout<<s[i];
    }
    
    return 0;
}