Submission details
Task:Kolmijako
Sender:jhuun
Submission time:2025-09-07 00:08:25 +0300
Language:C++ (C++20)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED23
#2ACCEPTED42
#3ACCEPTED35
Test results
testverdicttimegroup
#1ACCEPTED0.00 s1, 2, 3details
#2ACCEPTED0.01 s2, 3details
#3ACCEPTED0.01 s3details

Code

#include <bits/stdc++.h>

int main() {
    int t;
    std::cin >> t;
    for (int i = 0, n; i < t; ++i) {
        std::cin >> n;
        int S = n * (n + 1) / 2;
        int S3 = S / 3;
        if (S % 3 == 0 && S3 >= n) {
            std::set<int> X3;
            std::set<int> X2;
            std::set<int> X1;
            int X3s = 0;
            int X2s = 0;
            int X1s = 0;
            for (int i = n; X3s <= S3 && i >= 1; --i) {
                if (X3s + i <= S3) {
                    X3.insert(i);
                    X3s += i;
                }
                else {
                    const auto s = S3 - X3s;
                    X3.insert(s);
                    X3s += s;
                }
            }
            for (int i = n; X2s <= S3 && i >= 1; --i) {
                if (X3.count(i)) continue;
                if (X2s + i <= S3) {
                    X2.insert(i);
                    X2s += i;
                }
                else {
                    const auto s = S3 - X2s;
                    if (X3.count(s)) continue;
                    X2.insert(s);
                    X2s += s;
                }
            }
            for (int i = n; X1s <= S3 && i >= 1; --i) {
                if (X3.count(i) || X2.count(i)) continue;
                if (X1s + i <= S3) {
                    X1.insert(i);
                    X1s += i;
                }
                else {
                    const auto s = S3 - X1s;
                    if (X3.count(s) || X2.count(i)) continue;
                    X1.insert(s);
                    X1s += s;
                }
            }
            if (X3s == S3 && X2s == S3 && X1s == S3) {
                std::cout << "YES\n";
                std::cout << X3.size() << '\n';
                for (const auto x : X3) std::cout << x << ' ';
                std::cout << '\n';
                std::cout << X2.size() << '\n';
                for (const auto x : X2) std::cout << x << ' ';
                std::cout << '\n';
                std::cout << X1.size() << '\n';
                for (const auto x : X1) std::cout << x << ' ';
                std::cout << '\n';
            } else {
                std::cout << "NO\n";
            }
        } else {
            std::cout << "NO\n";
        }
    }
}

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
105
0 271 462 463 464 465 466 467 ...
Truncated