Submission details
Task:Chair Game
Sender:Erik Hedin
Submission time:2024-03-17 09:13:18 +0200
Language:C++ (C++17)
Status:READY
Result:100
Feedback
subtaskverdictscore
#1ACCEPTED8
#2ACCEPTED5
#3ACCEPTED4
#4ACCEPTED7
#5ACCEPTED12
#6ACCEPTED15
#7ACCEPTED20
#8ACCEPTED29
Test results
testverdicttimesubtask
#1ACCEPTED0.00 s1, 7, 8details
#2ACCEPTED0.00 s1, 7, 8details
#3ACCEPTED0.01 s1, 7, 8details
#4ACCEPTED0.01 s1, 7, 8details
#5ACCEPTED0.01 s1, 7, 8details
#6ACCEPTED0.01 s7, 8details
#7ACCEPTED0.02 s7, 8details
#8ACCEPTED0.07 s2, 8details
#9ACCEPTED0.01 s3, 4, 5, 6, 8details
#10ACCEPTED0.01 s3, 4, 5, 6, 8details
#11ACCEPTED0.01 s3, 4, 5, 6, 8details
#12ACCEPTED0.14 s3, 4, 5, 6, 8details
#13ACCEPTED0.01 s4, 5, 6, 7, 8details
#14ACCEPTED0.04 s4, 5, 6, 8details
#15ACCEPTED0.01 s4, 5, 6, 8details
#16ACCEPTED0.10 s4, 5, 6, 8details
#17ACCEPTED0.01 s5, 6, 7, 8details
#18ACCEPTED0.01 s5, 6, 8details
#19ACCEPTED0.01 s5, 6, 8details
#20ACCEPTED0.13 s5, 6, 8details
#21ACCEPTED0.00 s1, 6, 7, 8details
#22ACCEPTED0.01 s6, 7, 8details
#23ACCEPTED0.02 s6, 8details
#24ACCEPTED0.16 s6, 8details
#25ACCEPTED0.01 s8details
#26ACCEPTED0.39 s8details
#27ACCEPTED0.02 s3, 4, 5, 6, 8details
#28ACCEPTED0.02 s8details
#29ACCEPTED0.39 s8details
#30ACCEPTED0.39 s8details

Code

#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <numeric>
#include <functional>
#include <queue>

using namespace std;

typedef long long int ll;
typedef vector<ll> vll;
typedef pair<ll, ll> pll;
typedef vector<pll> vpll;
typedef vector<vll> vvll;
typedef vector<vpll> vvpll;
typedef map<ll, ll> mll_ll;

#define rep(i, a, b) for (ll i = a; i < b; i++)
#define sz(a) (ll) a.size()
#define mp(a, b) make_pair(a, b)
#define pb(a) push_back(a)
#define trav(itr, a, t) for (t::iterator itr = a.begin(); itr != a.end(); itr++)
#define all(a) a.begin(), a.end()

ll n;
vll s;

ll normalizeb(const ll& x) {return ((((x - 1) % n) + n) % n) + 1;}
ll normalizea(const ll& x) {return ((x % n) + n) % n;}

bool is_sol(const vll& a, const vll& b, const vll& c) { // check if {a[n - 2], a[n - 2]} + {b[n - 2], b[n - 1]} =?= {c[n - 2], c[n - 1]}
    return 
        ((a[n - 2] + b[n - 2] - c[n - 2]) % n == 0) ||
        ((a[n - 1] + b[n - 2] - c[n - 2]) % n == 0) ||
        ((a[n - 2] + b[n - 1] - c[n - 2]) % n == 0) ||
        ((a[n - 1] + b[n - 1] - c[n - 2]) % n == 0);
}

void modify(vll& a, vll& b, vll& c, mll_ll& ra) { // assume 0, 1, 2, ..., n - 3 are fine. n - 1 is extra
    //cout << is_sol(a, b, c) << endl;
    while (!is_sol(a, b, c)) {
        ll r = ra[normalizea(c[n - 2] - b[n - 2])];
        swap(b[n - 2], b[r]);
        swap(c[n - 2], c[r]);
        swap(c[n - 2], c[n - 1]);
        //cout << a[r] << " " << b[r] << " " << c[r] << endl;
        //cout << is_sol(a, b, c) << endl;
    }
    // resolve which pair is good
    if ((a[n - 2] + b[n - 2] - c[n - 2]) % n == 0) {
        //cout << "A" << endl;
    } else if ((a[n - 1] + b[n - 2] - c[n - 2]) % n == 0) {
        //cout << "B" << endl;
        swap(a[n - 1], a[n - 2]);
        swap(ra[a[n - 1]], ra[a[n - 2]]);
    } else if ((a[n - 2] + b[n - 1] - c[n - 2]) % n == 0) {
        swap(a[n - 1], a[n - 2]);
        swap(ra[a[n - 1]], ra[a[n - 2]]);
        swap(c[n - 1], c[n - 2]);
    } else if ((a[n - 1] + b[n - 1] - c[n - 2]) % n == 0) {
        //cout << "D" << endl;
        swap(c[n - 1], c[n - 2]);
    }
}

void solve() {
    cin >> n;
    s.resize(n);
    rep(i, 0, n) cin >> s[i];

    if (accumulate(all(s), 0LL) % n) {
        cout << "NO\n";
        return;
    }

    vll a(n);
    vll b(n, 0);
    vll c(n);
    mll_ll ra;
    rep(i, 0, n) {
        a[i] = i;
        ra[i] = i;
        c[i] = i;
    }

    rep(i, 0, n - 1) {
        // find the first b_j = 0
        ll j = 0;
        while (b[j] != 0) j++;

        //cout << "j = " << j << endl;

        b[j] = s[i];
        b[n - 1] -= s[i];

        swap(a[j], a[n - 2]);
        swap(ra[a[j]], ra[a[n - 2]]);
        swap(b[j], b[n - 2]);
        swap(c[j], c[n - 2]);

        modify(a, b, c, ra);

        /* cout << "a[]: ";
        rep(i, 0, n) cout << a[i] << " ";
        cout << endl;
        cout << "b[]: ";
        rep(i, 0, n) cout << b[i] << " ";
        cout << endl;
        cout << "c[]: ";
        rep(i, 0, n) cout << c[i] << " ";
        cout << endl;
        cout << "ra[]: ";
        rep(i, 0, n) cout << ra[i] << " ";
        cout << endl; */
    }

    vll answ(n);
    rep(i, 0, n) answ[a[i]] = normalizeb(b[i]);

    cout << "YES\n";
    rep(i, 0, n) cout << answ[i] << " ";
    cout << "\n";
}

int main() {
    cin.tie(NULL)->sync_with_stdio(false);

    ll testcases; cin >> testcases;
    rep(testcase, 0, testcases) solve();
    cout << flush;

    return 0;
}

Test details

Test 1

Subtask: 1, 7, 8

Verdict: ACCEPTED

input
637
1
1
2
1 1
...

correct output
YES

YES
1 1 
YES
...

user output
YES

YES
1 1 
YES
...
Truncated

Test 2

Subtask: 1, 7, 8

Verdict: ACCEPTED

input
246
7
1 1 1 1 1 1 1
7
1 1 2 1 1 7 1
...

correct output
YES
1 1 1 1 1 1 1 
YES
1 1 1 1 2 7 1 
YES
...

user output
YES
1 1 1 1 1 1 1 
YES
1 1 2 7 1 1 1 
YES
...
Truncated

Test 3

Subtask: 1, 7, 8

Verdict: ACCEPTED

input
810
8
1 1 1 1 1 1 1 1
8
1 1 1 8 1 1 2 1
...

correct output
YES
1 1 1 1 1 1 1 1 
YES
1 1 2 8 1 1 1 1 
YES
...

user output
YES
1 1 1 1 1 1 1 1 
YES
1 1 1 1 1 2 8 1 
YES
...
Truncated

Test 4

Subtask: 1, 7, 8

Verdict: ACCEPTED

input
1000
8
8 8 5 2 8 7 6 5
8
6 5 2 2 8 2 1 6
...

correct output
NO
YES
8 2 2 6 2 5 1 6 
NO
NO
...

user output
NO
YES
2 2 6 2 5 1 6 8 
NO
NO
...
Truncated

Test 5

Subtask: 1, 7, 8

Verdict: ACCEPTED

input
1000
8
2 1 7 7 2 3 8 2
8
4 1 5 4 7 3 5 3
...

correct output
YES
7 2 2 7 1 3 8 2 
YES
4 4 7 3 3 5 5 1 
YES
...

user output
YES
1 2 2 7 3 8 2 7 
YES
5 3 5 7 4 1 3 4 
YES
...
Truncated

Test 6

Subtask: 7, 8

Verdict: ACCEPTED

input
1000
16
15 16 6 4 14 2 1 6 2 16 10 2 9...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...
Truncated

Test 7

Subtask: 7, 8

Verdict: ACCEPTED

input
1000
16
2 4 13 6 8 16 12 8 16 5 9 5 9 ...

correct output
YES
13 5 2 8 12 2 8 5 16 16 9 6 9 ...

user output
YES
5 2 4 6 9 11 2 8 12 9 2 16 5 1...
Truncated

Test 8

Subtask: 2, 8

Verdict: ACCEPTED

input
1000
1
1
2
1 2
...

correct output
YES

NO
YES
3 1 2 
...

user output
YES

NO
YES
3 1 2 
...
Truncated

Test 9

Subtask: 3, 4, 5, 6, 8

Verdict: ACCEPTED

input
988
1
1
2
1 1
...

correct output
YES

YES
1 1 
YES
...

user output
YES

YES
1 1 
YES
...
Truncated

Test 10

Subtask: 3, 4, 5, 6, 8

Verdict: ACCEPTED

input
199
1
1
2
1 1
...

correct output
YES

YES
1 1 
YES
...

user output
YES

YES
1 1 
YES
...
Truncated

Test 11

Subtask: 3, 4, 5, 6, 8

Verdict: ACCEPTED

input
1000
100
1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 ...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...
Truncated

Test 12

Subtask: 3, 4, 5, 6, 8

Verdict: ACCEPTED

input
1000
100
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
YES
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
YES
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
Truncated

Test 13

Subtask: 4, 5, 6, 7, 8

Verdict: ACCEPTED

input
963
1
1
2
1 1
...

correct output
YES

YES
1 1 
YES
...

user output
YES

YES
1 1 
YES
...
Truncated

Test 14

Subtask: 4, 5, 6, 8

Verdict: ACCEPTED

input
979
1
1
2
1 1
...

correct output
YES

YES
1 1 
YES
...

user output
YES

YES
1 1 
YES
...
Truncated

Test 15

Subtask: 4, 5, 6, 8

Verdict: ACCEPTED

input
1000
100
3 3 1 2 1 1 2 3 1 3 2 1 1 3 1 ...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...
Truncated

Test 16

Subtask: 4, 5, 6, 8

Verdict: ACCEPTED

input
1000
100
1 2 2 2 2 1 1 1 2 3 1 1 3 2 1 ...

correct output
YES
2 2 2 3 1 2 3 1 2 3 1 3 1 3 1 ...

user output
YES
1 3 1 2 3 1 2 2 3 1 3 1 2 2 3 ...
Truncated

Test 17

Subtask: 5, 6, 7, 8

Verdict: ACCEPTED

input
980
1
1
2
1 1
...

correct output
YES

YES
1 1 
YES
...

user output
YES

YES
1 1 
YES
...
Truncated

Test 18

Subtask: 5, 6, 8

Verdict: ACCEPTED

input
947
1
1
2
1 1
...

correct output
YES

YES
1 1 
YES
...

user output
YES

YES
1 1 
YES
...
Truncated

Test 19

Subtask: 5, 6, 8

Verdict: ACCEPTED

input
1000
100
1 2 4 2 1 3 1 2 2 3 1 1 3 1 4 ...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...
Truncated

Test 20

Subtask: 5, 6, 8

Verdict: ACCEPTED

input
1000
100
3 4 4 4 4 4 4 3 3 3 4 4 2 3 3 ...

correct output
YES
4 2 4 4 1 3 4 2 4 2 3 4 2 4 4 ...

user output
YES
2 3 3 4 2 4 4 1 4 2 4 2 3 3 4 ...
Truncated

Test 21

Subtask: 1, 6, 7, 8

Verdict: ACCEPTED

input
715
1
1
2
1 1
...

correct output
YES

YES
1 1 
YES
...

user output
YES

YES
1 1 
YES
...
Truncated

Test 22

Subtask: 6, 7, 8

Verdict: ACCEPTED

input
843
1
1
2
1 1
...

correct output
YES

YES
1 1 
YES
...

user output
YES

YES
1 1 
YES
...
Truncated

Test 23

Subtask: 6, 8

Verdict: ACCEPTED

input
1000
100
3 4 5 1 4 4 2 3 2 3 4 1 1 1 2 ...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...
Truncated

Test 24

Subtask: 6, 8

Verdict: ACCEPTED

input
1000
100
5 3 4 3 5 3 3 5 5 4 5 5 5 5 2 ...

correct output
YES
4 4 5 5 2 4 4 5 3 5 5 2 5 5 2 ...

user output
YES
1 5 5 2 4 4 5 5 2 5 3 4 4 5 3 ...
Truncated

Test 25

Subtask: 8

Verdict: ACCEPTED

input
1000
100
88 70 59 44 28 10 19 19 42 16 ...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...
Truncated

Test 26

Subtask: 8

Verdict: ACCEPTED

input
1000
100
31 72 52 30 77 56 79 10 88 11 ...

correct output
YES
31 62 14 10 66 63 1 82 37 92 3...

user output
YES
65 67 10 63 88 22 53 17 72 94 ...
Truncated

Test 27

Subtask: 3, 4, 5, 6, 8

Verdict: ACCEPTED

input
1000
1
1
2
1 1
...

correct output
YES

YES
1 1 
YES
...

user output
YES

YES
1 1 
YES
...
Truncated

Test 28

Subtask: 8

Verdict: ACCEPTED

input
1000
1
1
2
2 2
...

correct output
YES

YES
2 2 
YES
...

user output
YES

YES
2 2 
YES
...
Truncated

Test 29

Subtask: 8

Verdict: ACCEPTED

input
1000
100
87 81 29 35 8 98 77 50 46 34 5...

correct output
YES
34 74 25 91 80 18 95 26 88 12 ...

user output
YES
29 65 24 73 95 85 66 85 40 73 ...
Truncated

Test 30

Subtask: 8

Verdict: ACCEPTED

input
1000
100
65 92 39 22 67 41 17 65 97 71 ...

correct output
YES
9 38 24 59 69 24 63 3 22 35 24...

user output
YES
98 35 41 7 77 52 63 97 38 70 8...
Truncated