zoukankan      html  css  js  c++  java
  • GHOJ 671 最大整数

    题目描述

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

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

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

     

    输入格式

      第一行,一个整数n;

      第二行,输入n个数。

    输出格式

      一行,为联接成的多位数。

     

    输入样例

    3

    13 312 343

    输出样例

    34331213

    题解

      我们设有$n$个字符串(即题目中给出的数),从$s_{1}$到$s_{n}$,容易想到,我们可以按照$s_{i} geqslant s_{i+1}$的规则进行排序,再从前往后相接得到结果。

      但是,这种策略是错误的。

      如$32$和$321$,按照上面的规则,得出来的结果是$32132$,但实际上更大的应该是$32321$。

      那么仔细想起下,其实容易得到正确的排序规则:$s_{i} + s_{j} geqslant s_{j} + s_{i}$(“$+$”为字符串相接)。

    #include <iostream>
    #include <string>
    #include <algorithm>
    
    using namespace std;
    
    int n;
    string s[25];
    
    inline bool cmp(string a, string b)
    {
        return a + b < b + a;
    }
    
    int main()
    {
        cin >> n;
        for(register int i = 1; i <= n; ++i)
        {
            cin >> s[i];
        }
        sort(s + 1, s + n + 1, cmp);
        ++n;
        while(--n)
        {
            cout << s[n];
        }
        return 0;
    }
    参考程序
  • 相关阅读:
    SoapUI 使用笔记
    git 使用笔记(二)
    git 使用笔记(一)
    jquery 拓展
    hdu 1024 Max Sum Plus Plus (DP)
    hdu 2602 Bone Collector (01背包)
    hdu 1688 Sightseeing (最短路径)
    hdu 3191 How Many Paths Are There (次短路径数)
    hdu 2722 Here We Go(relians) Again (最短路径)
    hdu 1596 find the safest road (最短路径)
  • 原文地址:https://www.cnblogs.com/kcn999/p/10886098.html
Copyright © 2011-2022 走看看