首页 > 代码库 > XidianOJ 1088 AK后的V8

XidianOJ 1088 AK后的V8

题目描述

公元20XX年X月X日,V8和他的小伙伴们又一次早早地AK(all kill)了,善良的V8为了不伤害其他蒟蒻们的心,纵使AK了也不提前离场,但是由于电脑被他的两个大神队友拿来玩五子棋(组队赛三人一台电脑),V8只能一个人无聊的在草稿纸上乱画,当V8因为思念过度画挫了某人的头像时,吓得V8马上写了三个数字,3,2,3,这时,机智的V8忽然发现:这三个数字拼起来最大是332!而不是233!!!无聊的V8又写下两个数字,97,98,然后V8发现其最大值是9897而不是9798。现在无聊的V8写下了n个数字,V8想知道这n个数字拼起来的最大值是多少。

 

输入

多组数据,请处理到文件结束。每组数据第一行一个数字n(1<=n<=10^5),第二行n个数字ai(0<=ai<=10^8)。

 

输出

每组数据一行输出,表示其拼起来的最大值。

--正文

对于使用sort函数偷懒的人来说

这题烦人之处是如何输出比较结果,试过c的字符串不太方便,还是用c++的string比较好

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
string s[100001];
bool cmp(string a,string b){
    string s1 = a + b,s2 = b + a;
    return (s1 > s2);
}

int main(){
    int n;
    while (scanf("%d",&n) != EOF){
        int i;
        for (i=0;i<n;i++){
            cin >> s[i];            
        }
        sort(s,s+n,cmp);
        for (i=0;i<n;i++){
            cout << s[i];
        }
        printf("\n");
    }
    return 0;
}

 

XidianOJ 1088 AK后的V8