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真是神奇的语言啊。

  • 相关阅读:
    606. Construct String from Binary Tree
    696. Count Binary Substrings
    POJ 3255 Roadblocks (次短路)
    POJ 2823 Sliding Window (单调队列)
    POJ 1704 Georgia and Bob (博弈)
    UVa 1663 Purifying Machine (二分匹配)
    UVa 10801 Lift Hopping (Dijkstra)
    POJ 3281 Dining (网络流之最大流)
    UVa 11100 The Trip, 2007 (题意+贪心)
    UVaLive 4254 Processor (二分+优先队列)
  • 原文地址:https://www.cnblogs.com/zorro-x/p/3290596.html
Copyright © 2011-2022 走看看