1038 Recover the Smallest Number (30 分)(a+b<b+a!)

题目描述:

1038 Recover the Smallest Number (30 分)
 

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 (≤) 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. Notice that the first digit must not be zero.

Sample Input:

5 32 321 3214 0229 87
 

Sample Output:

22932132143287
思路:a+b<b+a!
#include<iostream>
#include<queue>
#include<string.h>
#include<string>
#include<map>
#include<unordered_map>
#include<vector>
#include<algorithm>
#include<cmath>
#include<set>
using namespace std;
const int maxn = 205;
const int maxm = 100 + 1;
#define INT_MAX 0x7777777
typedef long long ll;
inline int read()
{
    int X = 0; bool flag = 1; char ch = getchar();
    while (ch < '0' || ch>'9') { if (ch == '-') flag = 0; ch = getchar(); }
    while (ch >= '0' && ch <= '9') { X = (X << 1) + (X << 3) + ch - '0'; ch = getchar(); }
    if (flag) return X;
    return ~(X - 1);
}
struct cmp {
    bool operator()(const string& a, const string& b) {
        return a + b < b + a;
    }
};
multiset<string,cmp>S;
int main() {
    int n = read();
    string t;
    for (int i = 1; i <= n; i++) {
        cin >> t;
        S.insert(t);
    }
    string res;
    for (auto& i : S) {
        res += i;
    }
    int i = 0;
    while (res[i] == '0')i++;
    if (i == res.size()) {
        cout << "0" << endl;
    }
    else {
            printf("%c", res.c_str()+i);
    }
    return 0;
}

 

posted @ 2021-03-11 21:34  cono奇犽哒  阅读(64)  评论(0)    收藏  举报