zoukankan      html  css  js  c++  java
  • PAT Advanced Level 1038

    1038 Recover the Smallest Number (30)(30 分)

    Given a collection of number segments, you are supposed to recover the smallest number from them. For example, given {32, 321, 3214, 0229, 87}, we can recover many numbers such like 32-321-3214-0229-87 or 0229-32-87-321-3214 with respect to different orders of combinations of these segments, and the smallest number is 0229-321-3214-32-87.

    Input Specification:

    Each input file contains one test case. Each case gives a positive integer N (<=10000) followed by N number segments. Each segment contains a non-negative integer of no more than 8 digits. All the numbers in a line are separated by a space.

    Output Specification:

    For each test case, print the smallest number in one line. Do not output leading zeros.

    Sample Input:

    5 32 321 3214 0229 87
    

    Sample Output:

    22932132143287


    还是得相信锯响就有沫,水大泡倒墙。
    /**********************
    author: yomi
    date: 18.5.27
    ps: 可以说是走错了方向了 为什么正确的算法我就是想不到呢
    答: 您做的题太少了
     啊 没脸看我写的东西 直接抄答案了 我会记住答案的技巧的
    掉进了去前导零的大坑 中间为的零应该保留啊 
    这个脑子啊
    一个大数 只去掉 最前面的零
    而这个数是由多个数拼成的 必须先拼成那个数再去前导零啊 
    不然那么多的数 去哪个的啊
    **********************/
    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    const int maxn = 10010;
    string str[maxn];
    string ans = "";
    int cmp(string a, string b)
    {
        return a+b < b+a;
    }
    int main()
    {
        int n;
        cin >> n;
        for(int i=0; i<n; i++){
            cin >> str[i];
        }
        sort(str, str+n, cmp);
        for(int i=0; i<n; i++){
            ans += str[i];
        }
        while(ans.size() && ans[0] == '0'){///去前导零的好办法,要记住
            ans.erase(ans.begin());
        }
        if(!ans.size()){
            cout << "0";
        }
        else{
            cout << ans;
        }
        return 0;
    }
    /*   ------------21分--------------------
    在抄答案的过程中恍然大悟 为什么我只有21分
    我在输入的同时去掉了前导零 中间位的前导零是应该保留的
    这样去掉了很多不该去掉的
    21分是活该啊
    struct str
    {
        string value;
        char small;
    }s[10010];
    //char findsmall(string a)
    //{
    //    char ch1 = 'A';
    //    //cout << "test" <<endl;
    //    for(int i=0; i<a.length(); i++){
    //        if(a[i] < ch1){
    //            ch1 = a[i];
    //        }
    //    }
    //
    //    return ch1;
    //}
    //int cmp(str a, str b)
    //{
    //    if(a.value[0]!=b.value[0])
    //        return a.value<b.value;
    //    return a.small<b.small;
    //}
    //int cmp(str a, str b)
    //{
    //    if(a.value[0]!=b.value[0])
    //        return a.value < b.value;
    //    if ((a.value+b.value)<(b.value+a.value)){
    //        return a.value < b.value;
    //    }
    //    return a.value > b.value;
    //
    //}
    int cmp(str a, str b)
    {
        return a.value+b.value < b.value+a.value;
    }
    int main()
    {
        int n;
        scanf("%d", &n);
        int flag = 1;
        for(int i=0; i<n; i++){
            cin >> s[i].value;
            int len = s[i].value.length();
            int pos = 0;
            for(int j=0; j<len; j++){
                if(s[i].value[j]!='0'){
                    break;
                }
                else{
                    pos++;
                }
            }
            if(pos!=0)
                s[i].value = s[i].value.substr(pos, len);
            //s[i].small = findsmall(s[i].value);
        }
        sort(s, s+n, cmp);
        for(int i=0; i<n; i++){
            if(s[i].value.length()){
                cout << s[i].value;
                flag = 0;
            }
    
        }
        if(flag)
            cout << "0";
        return 0;
    }
    */
    /**
    5 32 321 3214 0229 87
    
    22932132143287
    **/

  • 相关阅读:
    索引跳跃式扫描(INDEX SKIP SCAN)
    Oracle参数Arraysize设置对于逻辑读的影响分析
    Oracle的SQL优化思路
    通过SID查找历史执行的SQL语句
    expdp/impdp数据泵分区表导入太慢了。添加不检查元数据参数提高效率:ACCESS_METHOD=DIRECT_PATH
    Oracle不能并行直接添加主键的方法:先建唯一索引后建主键
    ORA-20011 问题处理
    安装grid时找不到ASM共享磁盘
    jmeter-测试计划
    jmeter解压后启动jmeter.bat报错:Not able to find java executable or version
  • 原文地址:https://www.cnblogs.com/AbsolutelyPerfect/p/9096411.html
Copyright © 2011-2022 走看看