| Task: | Kolmijako |
| Sender: | sharph2 |
| Submission time: | 2025-09-05 18:35:46 +0300 |
| Language: | C++ (C++17) |
| Status: | READY |
| Result: | 100 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 23 |
| #2 | ACCEPTED | 42 |
| #3 | ACCEPTED | 35 |
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | 1, 2, 3 | details |
| #2 | ACCEPTED | 0.01 s | 2, 3 | details |
| #3 | ACCEPTED | 0.01 s | 3 | details |
Code
#include <array>
#include <cmath>
#include <iostream>
#include <optional>
#include <vector>
using namespace std;
optional<array<vector<int>, 3>> ratko(int n) {
int sum = n * (n + 1) / 2;
if(sum % 3 != 0) {
return nullopt;
}
array<vector<int>, 3> ratk;
int i = 0;
if(n % 6 == 0) {
} else if(n % 6 == 2) {
if(n < 8) return nullopt;
ratk[0].push_back(8);
ratk[0].push_back(4);
ratk[1].push_back(2);
ratk[1].push_back(3);
ratk[1].push_back(7);
ratk[2].push_back(1);
ratk[2].push_back(5);
ratk[2].push_back(6);
i = 8;
} else if(n % 6 == 3) {
if(n < 9) return nullopt;
ratk[0].push_back(1);
ratk[0].push_back(5);
ratk[0].push_back(9);
ratk[1].push_back(3);
ratk[1].push_back(4);
ratk[1].push_back(8);
ratk[2].push_back(2);
ratk[2].push_back(6);
ratk[2].push_back(7);
i = 9;
} else if(n % 6 == 5) {
ratk[0].push_back(1);
ratk[0].push_back(4);
ratk[1].push_back(2);
ratk[1].push_back(3);
ratk[2].push_back(5);
i = 5;
} else {
throw 5;
}
for(; i < n; i += 6) {
ratk[0].push_back(i + 1);
ratk[1].push_back(i + 2);
ratk[2].push_back(i + 3);
ratk[2].push_back(i + 4);
ratk[1].push_back(i + 5);
ratk[0].push_back(i + 6);
}
if(i != n) throw 5;
return ratk;
}
void validoi(int n, array<vector<int>, 3>& ratk) {
int sum = n * (n + 1) / 2;
if(sum % 3 != 0) {
throw 5;
}
sum /= 3;
vector<bool> seen(n + 1);
for(vector<int>& osa : ratk) {
int sum2 = 0;
for(int luku : osa) {
if(luku <= 0 || luku > n || seen[luku]) throw 5;
seen[luku] = true;
sum2 += luku;
}
if(sum2 != sum) throw 5;
}
for(int i = 1; i <= n; ++i) {
if(!seen[i]) throw 5;
}
}
int main() {
cin.sync_with_stdio(false);
cin.tie(nullptr);
// for(int n = 1; n <= 1000; ++n) {
// auto ratk = ratko(n);
// if(ratk.has_value()) {
// validoi(n, ratk.value());
// }
// }
int tc;
cin >> tc;
cout.precision(20);
for(int ti = 0; ti < tc; ++ti) {
int n;
cin >> n;
auto ratk = ratko(n);
if(ratk.has_value()) {
cout << "YES\n";
for(vector<int>& osa : ratk.value()) {
cout << osa.size() << "\n";
for(int luku : osa) {
cout << luku << " ";
}
cout << "\n";
}
} else {
cout << "NO\n";
}
}
return 0;
}
Test details
Test 1
Group: 1, 2, 3
Verdict: ACCEPTED
| input |
|---|
| 15 1 2 3 4 ... |
| correct output |
|---|
| NO NO NO NO YES ... |
| user output |
|---|
| NO NO NO NO YES ... Truncated |
Test 2
Group: 2, 3
Verdict: ACCEPTED
| input |
|---|
| 100 1 2 3 4 ... |
| correct output |
|---|
| NO NO NO NO YES ... |
| user output |
|---|
| NO NO NO NO YES ... Truncated |
Test 3
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 100 564 895 546 980 ... |
| correct output |
|---|
| YES 188 1 6 12 7 18 13 24 19 30 25 36 ... |
| user output |
|---|
| YES 188 1 6 7 12 13 18 19 24 25 30 31 ... Truncated |
