Submission details
Task:Kolmijako
Sender:jlaire
Submission time:2025-09-05 18:28:45 +0300
Language:C++ (C++11)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED23
#2ACCEPTED42
#3ACCEPTED35
Test results
testverdicttimegroup
#1ACCEPTED0.00 s1, 2, 3details
#2ACCEPTED0.00 s2, 3details
#3ACCEPTED0.01 s3details

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:65:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   65 |     scanf("%d", &t);
      |     ~~~~~^~~~~~~~~~
input/code.cpp:68:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   68 |         scanf("%d", &n);
      |         ~~~~~^~~~~~~~~~

Code

#include <assert.h>
#include <stdio.h>

int group[1024];
int size[3];
int big;

bool go(int n, int sum, int g)
{
    if (sum==0) return true;

    for (int i=sum>big?big:sum; i>0; i--) {
        if (i==big && group[i]) big--;
        if (group[i]) continue;
        group[i] = g;
        size[g]++;
        if (!go(n, sum-i, g)) {
            assert(0);
            return false;
        }
        return true;
    }
    if (sum > 0) {
        assert(0);
        return false;
    }
    return true;
}

void solve(int n)
{
    int sum = n*(n+1)/2;
    if (sum%3) {
        goto fail;
    }
    if (n<=3) goto fail;

    big = n;
    for (int i=1; i<=n; i++) group[i]=0;
    for (int i=0; i<3; i++) size[i]=0;

    if (!go(big, sum/3, 1)) { assert(0); goto fail; }
    if (!go(big, sum/3, 2)) { assert(0); goto fail; }

    size[0] = n-size[1]-size[2];

    puts("YES");
    for (int g=0; g<3; g++) {
        printf("%d\n", size[g]);
        for (int i=1; i<=n; i++) {
            if (group[i]==g) {
                printf("%d%c", i, "\n "[!!--size[g]]);
            }
        }
    }
    return;

fail:
    puts("NO");
}

int main(void)
{
    int t;
    scanf("%d", &t);
    for (int i=0; i<t; i++) {
        int n;
        scanf("%d", &n);
        solve(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
325
1 2 3 4 5 6 7 8 9 10 11 12 13 ...
Truncated