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

  • 相关阅读:
    搭建一个免费的,无限流量的Bloggithub Pages和Jekyll入门
    通过扩展方法 链式方法 为MVC 3 视图添加验证
    让移动UI模式设计者获得灵感的10个有用的网站资源
    企业级应用架构(NHibernater+Spring.Net+MVC3)_V1.0
    把博客放在Github
    实例化需求—流程
    nginx+keepalievd,实现负载均衡和故障点切换。keepalived双机热备。
    古城钟楼
    从初步使用该控件到多维数据集控件PivotGridControl
    搜索引擎的评价
  • 原文地址:https://www.cnblogs.com/zorro-x/p/3290596.html
Copyright © 2011-2022 走看看