| Task: | Chair Game |
| Sender: | John Hedin |
| Submission time: | 2024-03-21 00:51:09 +0200 |
| Language: | C++ (C++17) |
| Status: | READY |
| Result: | 100 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 8 |
| #2 | ACCEPTED | 5 |
| #3 | ACCEPTED | 4 |
| #4 | ACCEPTED | 7 |
| #5 | ACCEPTED | 12 |
| #6 | ACCEPTED | 15 |
| #7 | ACCEPTED | 20 |
| #8 | ACCEPTED | 29 |
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.01 s | 1, 7, 8 | details |
| #2 | ACCEPTED | 0.01 s | 1, 7, 8 | details |
| #3 | ACCEPTED | 0.01 s | 1, 7, 8 | details |
| #4 | ACCEPTED | 0.01 s | 1, 7, 8 | details |
| #5 | ACCEPTED | 0.01 s | 1, 7, 8 | details |
| #6 | ACCEPTED | 0.01 s | 7, 8 | details |
| #7 | ACCEPTED | 0.01 s | 7, 8 | details |
| #8 | ACCEPTED | 0.03 s | 2, 8 | details |
| #9 | ACCEPTED | 0.01 s | 3, 4, 5, 6, 8 | details |
| #10 | ACCEPTED | 0.01 s | 3, 4, 5, 6, 8 | details |
| #11 | ACCEPTED | 0.02 s | 3, 4, 5, 6, 8 | details |
| #12 | ACCEPTED | 0.06 s | 3, 4, 5, 6, 8 | details |
| #13 | ACCEPTED | 0.01 s | 4, 5, 6, 7, 8 | details |
| #14 | ACCEPTED | 0.02 s | 4, 5, 6, 8 | details |
| #15 | ACCEPTED | 0.02 s | 4, 5, 6, 8 | details |
| #16 | ACCEPTED | 0.05 s | 4, 5, 6, 8 | details |
| #17 | ACCEPTED | 0.01 s | 5, 6, 7, 8 | details |
| #18 | ACCEPTED | 0.01 s | 5, 6, 8 | details |
| #19 | ACCEPTED | 0.02 s | 5, 6, 8 | details |
| #20 | ACCEPTED | 0.06 s | 5, 6, 8 | details |
| #21 | ACCEPTED | 0.01 s | 1, 6, 7, 8 | details |
| #22 | ACCEPTED | 0.01 s | 6, 7, 8 | details |
| #23 | ACCEPTED | 0.02 s | 6, 8 | details |
| #24 | ACCEPTED | 0.06 s | 6, 8 | details |
| #25 | ACCEPTED | 0.03 s | 8 | details |
| #26 | ACCEPTED | 0.10 s | 8 | details |
| #27 | ACCEPTED | 0.02 s | 3, 4, 5, 6, 8 | details |
| #28 | ACCEPTED | 0.03 s | 8 | details |
| #29 | ACCEPTED | 0.10 s | 8 | details |
| #30 | ACCEPTED | 0.10 s | 8 | details |
Code
#include <iostream>
#include <vector>
#include <set>
using namespace std;
bool debug = false;
typedef int ll;
typedef vector<ll> vll;
typedef vector<vll> vvll;
typedef pair<ll,ll> pll;
typedef set<pll> sp;
typedef vector<sp> vsp;
#define rep(a,b,c) for(ll a = b; a < c; a++)
#define rrep(a,b,c) for(ll a = c-1; a >= b; a--)
#define itr_rep(a,b,_type) for(_type::iterator a = b.begin(); a != b.end(); a++)
#define pb push_back
#define mp make_pair
#define sz size
#define all(a) a.begin(),a.end()
ll t;
ll n;
vll s;
vvll inp;
vll n_list;
vll b;
vll c;
vll a;
vll a_inv;
void sol();
void op(ll index, ll target) { // makes b_{index} = target and adjusts b[n-1]
swap(a[index],a[n-2]);
swap(a_inv[a[index]],a_inv[a[n-2]]);
swap(b[index],b[n-2]);
swap(c[index],c[n-2]);
b[n-1] = (b[n-1] + b[n-2] - target + n)%n;
b[n-2] = target;
while (true) {
if ((a[n-1]+b[n-1])%n == c[n-1]%n) {return;} // done
if ((a[n-1]+b[n-1])%n == c[n-2]%n) {
swap(c[n-1],c[n-2]);
return;
}
if ((a[n-2]+b[n-1])%n == c[n-1]%n) {
swap(a[n-1],a[n-2]);
swap(a_inv[a[n-1]],a_inv[a[n-2]]);
return;
}
if ((a[n-2]+b[n-1])%n == c[n-2]%n) {
swap(c[n-1],c[n-2]);
swap(a[n-1],a[n-2]);
swap(a_inv[a[n-1]],a_inv[a[n-2]]);
return;
}
// fix b_{n-1} because b[n-1] is always the scapegoat thingy.
ll r = a_inv[(n + c[n-2] - b[n-2])%n]; // x = c[n-2] - c[n-2] mod n
swap(b[n-2],b[r]);
swap(c[n-2],c[r]);
swap(c[n-2],c[n-1]);
}
}
int main() {
cin >> t;
inp.resize(t,vll());
n_list.resize(t,0);
rep(i,0,t) {
cin >> n_list[i];
inp[i].resize(n_list[i],0);
rep(j,0,n_list[i]) {cin >> inp[i][j];}
}
rep(i,0,t) {
n = n_list[i];
s.resize(n,0);
rep(j,0,n) {s[j] = inp[i][j];}
ll _sum = 0;
rep(j,0,n) {_sum += s[j];}
if (_sum % n == 0) {sol();}
else {cout << "NO" << endl;}
}
return 0;
}
void sol() {
a.resize(n,0);
b.resize(n,0);
c.resize(n,0);
a_inv.resize(n,0);
rep(i,0,n) {a[i] = i;}
rep(i,0,n) {b[i] = 0;}
rep(i,0,n) {c[i] = i;}
rep(i,0,n) {a_inv[i] = i;}
ll loop;
rep(i,0,n-1) {
//rep(j,0,n) {cout << (j + b[a_inv[j]] - c[a_inv[j]] + n) % n << " ";}
//cout << endl;
loop = 0;
while (loop < n) {
if (b[loop] == 0) {
op(loop, s[i]);
loop = n;
}
loop++;
}
}
if (n==1) {b[0] = s[0];}
//rep(i,0,n) {cout << (i + b[a_inv[i]] - c[a_inv[i]] + n) % n << " ";}
//cout << endl;
rep(i,0,n) {if (b[i] == 0) {b[i] = n;}}
cout << "YES" << endl;
rep(i,0,n) {cout << b[a_inv[i]] << " ";}
cout << endl; // Given that ai=i here too ???...
//rep(i,0,n) {cout << c[a_inv[i]] << " ";}
//cout << endl;
return;
}
// We have been given some differences bi
// We also have ai = i
// We need i+bi to be distinct mod n for all i.Test details
Test 1
Group: 1, 7, 8
Verdict: ACCEPTED
| input |
|---|
| 637 1 1 2 1 1 ... |
| correct output |
|---|
| YES 1 YES 1 1 YES ... |
| user output |
|---|
| YES 1 YES 1 1 YES ... Truncated |
Test 2
Group: 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
Group: 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
Group: 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
Group: 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
Group: 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
Group: 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 8 9 2 4 11 16 13 5 5 9 6 16 2 ... Truncated |
Test 8
Group: 2, 8
Verdict: ACCEPTED
| input |
|---|
| 1000 1 1 2 1 2 ... |
| correct output |
|---|
| YES 1 NO YES 3 1 2 ... |
| user output |
|---|
| YES 1 NO YES 3 1 2 ... Truncated |
Test 9
Group: 3, 4, 5, 6, 8
Verdict: ACCEPTED
| input |
|---|
| 988 1 1 2 1 1 ... |
| correct output |
|---|
| YES 1 YES 1 1 YES ... |
| user output |
|---|
| YES 1 YES 1 1 YES ... Truncated |
Test 10
Group: 3, 4, 5, 6, 8
Verdict: ACCEPTED
| input |
|---|
| 199 1 1 2 1 1 ... |
| correct output |
|---|
| YES 1 YES 1 1 YES ... |
| user output |
|---|
| YES 1 YES 1 1 YES ... Truncated |
Test 11
Group: 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
Group: 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
Group: 4, 5, 6, 7, 8
Verdict: ACCEPTED
| input |
|---|
| 963 1 1 2 1 1 ... |
| correct output |
|---|
| YES 1 YES 1 1 YES ... |
| user output |
|---|
| YES 1 YES 1 1 YES ... Truncated |
Test 14
Group: 4, 5, 6, 8
Verdict: ACCEPTED
| input |
|---|
| 979 1 1 2 1 1 ... |
| correct output |
|---|
| YES 1 YES 1 1 YES ... |
| user output |
|---|
| YES 1 YES 1 1 YES ... Truncated |
Test 15
Group: 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
Group: 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
Group: 5, 6, 7, 8
Verdict: ACCEPTED
| input |
|---|
| 980 1 1 2 1 1 ... |
| correct output |
|---|
| YES 1 YES 1 1 YES ... |
| user output |
|---|
| YES 1 YES 1 1 YES ... Truncated |
Test 18
Group: 5, 6, 8
Verdict: ACCEPTED
| input |
|---|
| 947 1 1 2 1 1 ... |
| correct output |
|---|
| YES 1 YES 1 1 YES ... |
| user output |
|---|
| YES 1 YES 1 1 YES ... Truncated |
Test 19
Group: 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
Group: 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
Group: 1, 6, 7, 8
Verdict: ACCEPTED
| input |
|---|
| 715 1 1 2 1 1 ... |
| correct output |
|---|
| YES 1 YES 1 1 YES ... |
| user output |
|---|
| YES 1 YES 1 1 YES ... Truncated |
Test 22
Group: 6, 7, 8
Verdict: ACCEPTED
| input |
|---|
| 843 1 1 2 1 1 ... |
| correct output |
|---|
| YES 1 YES 1 1 YES ... |
| user output |
|---|
| YES 1 YES 1 1 YES ... Truncated |
Test 23
Group: 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
Group: 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
Group: 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
Group: 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
Group: 3, 4, 5, 6, 8
Verdict: ACCEPTED
| input |
|---|
| 1000 1 1 2 1 1 ... |
| correct output |
|---|
| YES 1 YES 1 1 YES ... |
| user output |
|---|
| YES 1 YES 1 1 YES ... Truncated |
Test 28
Group: 8
Verdict: ACCEPTED
| input |
|---|
| 1000 1 1 2 2 2 ... |
| correct output |
|---|
| YES 1 YES 2 2 YES ... |
| user output |
|---|
| YES 1 YES 2 2 YES ... Truncated |
Test 29
Group: 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
Group: 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 |
