zoukankan      html  css  js  c++  java
  • PAT 1038 体验Python之美

    1038. Recover the Smallest Number (30)

    时间限制

    400 ms

    内存限制

    32000 kB

    代码长度限制

    16000 B

    判题程序

    Standard

    作者

    CHEN, Yue

    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
     
    我做题都是先用python秒一下,要是超时什么的就换C++了,这题我一看,就写了下面这一行代码:
    print int(''.join(sorted(raw_input().split()[1:], lambda s1, s2: cmp(s1+s2, s2+s1))))

    是的只有一行!可惜最后一个test还是超时了。于是用C++再写:

    #include <set>
    #include <sstream>
    #include <string>
    #include <iostream>
    using namespace std;
    
    class mstring : public string {
    public:
        inline bool operator<(const string &s) const {
            string tmpa(*this);
            tmpa.append(s);
            string tmpb(s);
            tmpb.append(*this);
            return tmpa.compare(tmpb) < 0;
        }
    };
    
    int main() {
        //#pragma warning(disable:4996)
        //freopen("..\advanced-pat-python\test.txt", "r", stdin);
        int N;
        cin >> N;
        set<mstring> nums;
        mstring ms;
        while (N--) {
            cin >> ms;
            nums.insert(ms);
        }
        mstring num;
        set<mstring>::iterator it = nums.begin();
        while (it!=nums.end()) {
            num += *(it++);
        }
        while (!num.empty() && *num.begin()=='0') {
            num.erase(num.begin());
        }
        if (num.empty()) {
            num += '0';
        }
        cout << num << endl;
    }

    总体来说还是较为简单的,但是没有Python那么爽的一行解决掉了。Python真是神奇的语言啊。

  • 相关阅读:
    sphinx安装
    如何获取原生数据
    DOM详解
    JavaScript简单入门(补充篇)
    JavaScript的简单入门
    Java正则表达式练习
    Java反射机制(Reflect)解析
    21070118记
    CSS3设置Table奇数行和偶数行样式
    获取当前地址
  • 原文地址:https://www.cnblogs.com/zorro-x/p/3290596.html
Copyright © 2011-2022 走看看