时间限制 python
400 ms ios
内存限制 git
32000 kB app
代码长度限制 this
16000 B spa
判题程序 3d
Standard orm
做者 内存
CHEN, Yue ci
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 87Sample 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真是神奇的语言啊。