QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#122658#87. Devil's Sharesomethingnew#13 0ms3488kbC++204.2kb2023-07-10 21:31:092024-07-04 00:36:09

Judging History

你现在查看的是最新测评结果

  • [2024-07-04 00:36:09]
  • 评测
  • 测评结果:13
  • 用时:0ms
  • 内存:3488kb
  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-07-10 21:31:09]
  • 提交

answer

//  ↘ ⬇ ⬇ ⬇ ⬇ ⬇ ↙
//  ➡ @roadfromroi ⬅
//  ↗ ⬆ ⬆ ⬆ ⬆ ⬆ ↖
#include <iostream>
#include "vector"
#include "algorithm"
#include "numeric"
#include "climits"
#include "iomanip"
#include "bitset"
#include "cmath"
#include "map"
#include "deque"
#include "array"
#include "set"
#define all(x) x.begin(), x.end()
using namespace std;
struct dsu{
    vector<int> nxt;
    void init(int n) {
        nxt.assign(n, {});
        for (int i = 0; i < nxt.size(); ++i) {
            nxt[i] = i;
        }
    }
    void plsone() {
        nxt.push_back(0);
        nxt.back() = nxt.size() - 1;
    }
    int getv(int v) {
        if (nxt[v] == v)
            return v;
        return nxt[v] = getv(nxt[v]);
    }
    void pop(int v) {
        nxt[v] = v + 1;
    }
};
void recstr(int v, vector<pair<pair<int, int>, int>> &a, string &s) {
    if (v < 9) {
        s.push_back('1' + v);
        return;
    }
    recstr(a[v].first.first, a, s);
    recstr(a[v].first.second, a, s);
}
void solve() {
    int k;
    cin >> k;
    int sm = 0;
    vector<pair<pair<int, int>, int>> a(9);
    string s1, s2;
    for (auto &i : a) {
        cin >> i.second;
    }
    string sbk;
    int peppa = k - 1;
    for (int i = 8; i >= 0; --i) {
        while (a[i].second and peppa) {
            peppa--;
            a[i].second--;
            sbk.push_back(i + '1');
        }
    }
    reverse(all(sbk));
    int mx = -1;
    int nmx = 0;
    int nmxhelp = 0;
    for (int i = 0; i < 9; ++i) {
        if (a[i].second)
            mx = i;
    }
    for (int i = 0; i < 9; ++i) {
        //if (a[i].second and i != mx)
        nmxhelp += a[i].second;
    }
    dsu nxt;
    nxt.init(9);
    //cout << a[mx].second << endl;
    while (nmxhelp != a[mx].second) {
        nmx = nmxhelp - a[mx].second;
        int c = a[mx].second;
        int kt = (c + nmx - 1) / nmx;
        int mx2cnt = a[mx].second % kt, mx2 = -1;
        //cout << c << ' ' << nmx << ' ' << kt << ' ' << mx2cnt << endl;
        if (kt > 1) {
            int rmx = mx;
            for (int i = 0; i < kt - 1; ++i) {
                if (i + 1 == kt - 1)
                    mx2 = rmx;
                a.push_back({{rmx, mx}, 0});
                nxt.plsone();
                rmx = a.size() - 1;
            }
            a[rmx].second = (a[mx].second + kt - 1) / kt - mx2cnt;
            nmxhelp += a[rmx].second;
            nmxhelp -= a[mx].second;
            a[mx].second = 0;
            mx = rmx;
            //cout << a[mx].second << '\n';
        }
        int v = nxt.getv(0);
        vector<pair<pair<int, int>, int>> p1, p2;
        while (a[mx].second) {
            while (a[v].second == 0) {
                nxt.pop(v);
                v = nxt.getv(v);
            }
            int stepa = min(a[mx].second, a[v].second);
            //cout << mx << ' ' << v << ' ' << stepa << endl;
            a[mx].second -= stepa;
            a[v].second -= stepa;
            p1.push_back({{mx, v}, stepa});
            nmxhelp -= stepa;
        }
        if (mx2cnt) {
            a[mx2].second = mx2cnt;
            nmxhelp += mx2cnt;
            while (a[mx2].second) {
                while (a[v].second == 0) {
                    nxt.pop(v);
                    v = nxt.getv(v);
                }
                int stepa = min(a[mx2].second, a[v].second);
                a[mx2].second -= stepa;
                a[v].second -= stepa;
                p2.push_back({{mx2, v}, stepa});
                nmxhelp -= stepa;
            }
        }
        for (auto i : p2) {
            a.push_back(i);
            nxt.plsone();
        }
        for (auto i : p1) {
            a.push_back(i);
            mx = a.size() - 1;
            nxt.plsone();
        }
    }
    string sres;
    recstr(mx, a, sres);
    string sres2;
    for (int i = 0; i < a[mx].second; ++i) {
        sres2 += sres;
    }
    sres2 += sbk;
    cout << sres2 << '\n';
}
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
}
/*
1
7
3 3 3 0 0 6 2 2 2
 */

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 13
Accepted

Test #1:

score: 13
Accepted
time: 0ms
memory: 3488kb

input:

1536
4
2 1 2 2 0 0 0 0 0
2
3 2 3 3 0 0 0 0 0
3
1 2 0 3 0 0 0 0 0
4
2 2 3 2 0 0 0 0 0
1
3 3 2 2 0 0 0 0 0
3
1 2 2 0 0 0 0 0 0
3
2 1 2 3 0 0 0 0 0
6
1 3 3 0 0 0 0 0 0
4
1 0 1 2 0 0 0 0 0
4
2 1 2 3 0 0 0 0 0
4
2 3 0 2 0 0 0 0 0
5
3 2 3 3 0 0 0 0 0
3
2 2 1 1 0 0 0 0 0
3
2 3 2 0 0 0 0 0 0
8
1 3 1 3 0 0 0...

output:

3112344
41223334114
412244
312312344
4122233411
22133
41123344
2122333
1344
31312444
2121244
31223113444
212134
2212133
12223444
44143
41222333
41113344
3222313144
42223414
322231
211444
31122
11223344
11222334
13
313123124
323244
3232234
41133
3123123444
114
411222334
11333
12234
422233
3111444
444...

result:

ok Correct!

Subtask #2:

score: 0
Runtime Error

Test #2:

score: 0
Runtime Error

input:

35960
2
0 0 5 2 0 0 17 0 7
2
0 6 0 15 0 0 0 4 5
2
3 0 0 1 20 0 0 0 8
2
0 5 0 0 15 0 5 7 0
2
0 0 2 11 0 0 4 0 10
2
0 14 0 0 11 0 0 6 1
2
0 0 10 3 0 0 8 0 1
2
0 1 9 0 2 0 0 6 0
2
0 0 0 0 5 0 12 7 3
2
0 0 5 0 0 2 0 8 9
2
7 2 0 0 0 0 0 6 8
2
0 0 0 4 1 0 3 18 0
2
0 0 14 4 8 0 0 0 1
2
0 2 0 0 0 13 3 9 0
2...

output:


result:


Subtask #3:

score: 0
Runtime Error

Test #11:

score: 0
Runtime Error

input:

26488
21
7 19 0 0 0 0 0 0 0
3
15 21 0 0 0 0 0 0 0
7
4 35 0 0 0 0 0 0 0
5
28 12 0 0 0 0 0 0 0
22
40 3 0 0 0 0 0 0 0
1
7 6 0 0 0 0 0 0 0
5
12 21 0 0 0 0 0 0 0
18
27 13 0 0 0 0 0 0 0
2
36 6 0 0 0 0 0 0 0
15
19 14 0 0 0 0 0 0 0
34
17 20 0 0 0 0 0 0 0
11
17 5 0 0 0 0 0 0 0
19
10 12 0 0 0 0 0 0 0
28
29 9 ...

output:


result:


Subtask #4:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

0%