時間限制 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真是神奇的語言啊。