zoukankan      html  css  js  c++  java
  • 记校赛水题----AK爷兼职计

    Description

     

    AK爷最近收到一份兼职,是去幼儿园看小朋友,AK爷认为看孩子这件事情很简单,但是事实并非如此。幼儿园里的孩子们喜欢数学,不仅九九乘法口诀倒背如流而且精通各种算法。某天,AK爷上完课,有一个调皮的孩子走过来说:“AK老师,我有一道数学题目不会,你能帮帮我吗?给你一个数字N,紧接着N个数字a[i],从到,每个​,让你将这些数字拼接起来,使其在所有的拼接组合中它是最大的一个。例如:N = 3 ,a[0] = 3,a[1] = 2,a[2] = 1,它有6种组合,在所有的组合中,321最大,输出321。”AK爷心想,这不很简单吗,于是他把这道题丢给了聪明的你,聪明如你,快来帮帮AK爷吧。

    Input

    第一行一个数字N代表数字个数,。

    第二行N个数字,每个数的位数不超过10位,每个测试样例的数字位数和不超过​。

    Output

    输出只包含一个整数

    数据范围:

    0<N<=10^5

     

    Sample Input 1 

    3
    3 2 1

    Sample Output 1

    321

    Sample Input 2 

    9
    1 2 3 4 5 6 7 8 9

    Sample Output 2

    987654321

    Sample Input 3 

    5
    9 9 9 9 9 

    Sample Output 3

    99999
              

    给一组数,组合成最大。
    很简单的一个题,之前还做过,可惜比赛时大脑短路没做出来。
    你看看,比如对于 81,10,9,答案是 98110,自己分析的过程是:

    1和10,8110比1081大,为8110,然后是98110和81109比较,98110大。这就是答案了。
    这和字典序排列是一样的,所以当成字符串,a+b>b+c,看看两个数是正着拼大还是反着拼大呢。string可以直接进行这样的操作。
    比如说对于9,91,比较是991大,还是919大,这就是sort的一个过程!
        
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<cstdio>
    using namespace std;
    const int maxn = 1e5+10;
    string s[maxn];
    bool cmp(string a,string b)
    {
        return a+b>b+a;
    }
    int main()
    {
         int n;
         cin>>n;
         for(int i = 0 ; i<n;i++)
             cin>>s[i];
        sort(s,s+n,cmp);
        for(int i = 0; i< n ; i++)
            cout<<s[i];
        cout<<endl;
        return 0;
    }

     


        
  • 相关阅读:
    ORA16014 与 ORA00312
    ORA26687
    ORA32004问题解决
    ORA23616:执行块5失败
    Streams实践之Schemas级复制
    Streams FAQ
    ORA23622: 正在执行操作SYS.DBMS_STREAMS_ADM.MAINTAIN_GLOBAL
    为什么白帽SEO更好?
    HyperV虚拟机安装及网卡无法找到,驱动无法安装解决办法
    Memcahed分布式缓存服务替换Session解决方案——简单介绍[转]
  • 原文地址:https://www.cnblogs.com/liyexin/p/12007009.html
Copyright © 2011-2022 走看看