Submission #685084

#TimeUsernameProblemLanguageResultExecution timeMemory
685084BliznetcDevil's Share (RMI19_devil)C++17
100 / 100
95 ms6024 KiB
#include <bits/stdc++.h>

#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-O3")
#pragma GCC target("avx2")

using namespace std;

#define pb push_back
#define sz size()
#define all(x) x.begin(), x.end()
#define F first
#define S second

typedef pair < int, int > pii;
typedef vector < int >  vi;
typedef vector < vi >  vvi;

int a[10];

int get_max() {
    int num = 9;
    while (num >= 1 && a[num] == 0) {
        num--;
    }
    return num;
}

int get_min() {
    int num = 1;
    while (num <= 9 && a[num] == 0) {
        num++;
    }
    return num;
}

void solve(){
    int k;
    cin >> k;
    int n = 0;
    for (int i = 1; i <= 9; i++) {
        cin >> a[i];
        n += a[i];
    }
    int nn = n;
    int ans[n + 7];
    for (int i = 1; i <= n; i++) {
        ans[i] = 0;
    }
    for (int i = 1; i <= k - 1; i++) {
        int num = get_max();
        ans[n] = num;
        a[num] -= 1;
        n--;
    }

    int mx = get_max();
    vector <string> vec;
    for (int i = 1; i <= a[mx]; i++) {
        vec.pb (to_string(mx));
    }
    a[mx] = 0;
    queue <string> q;
    for (int i = 1; i < 10; i++) {
        while (a[i]--) {
            q.push(to_string(i));
        }
    }

    int num = vec.sz - 1;
    while (!q.empty()) {
        string cur = q.front();
        q.pop();
        vec[num] += cur;
        if (num) {
            if (q.empty() || q.front() != cur) {
                while (vec.sz > num) {
                    q.push(vec.back());
                    vec.pop_back();
                }
            }
        }
        if (num == 0) {
            num = vec.sz - 1;
        }
        else {
            num--;
        }
    }

    for (auto i : vec) {
        cout << i;
    }
    for (int i = nn - k + 2; i <= nn; i++) {
        cout << ans[i];
    }
    cout << "\n";
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    int t = 1;
    cin >> t;
    while (t--) {
        solve();
        cout << "\n";
    }
}

/*
4
3 3 0 0 0 0 0 5 3
 */

Compilation message (stderr)

devil.cpp: In function 'void solve()':
devil.cpp:77:31: warning: comparison of integer expressions of different signedness: 'std::vector<std::__cxx11::basic_string<char> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   77 |                 while (vec.sz > num) {
      |                        ~~~~~~~^~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...