Submission #754117

#TimeUsernameProblemLanguageResultExecution timeMemory
754117piOOEBroken Device (JOI17_broken_device)C++17
100 / 100
36 ms2464 KiB
#include "Annalib.h"

void Anna(int N, long long x, int K, int P[]) {
    int used[150]{};

    for (int i = 0; i < K; ++i) {
        used[P[i]] = true;
    }

    for (int i = N - 3; i >= 0; i -= 3) {
        int a = 0, b = 0, c = 0;

        if (used[i] + used[i + 1] + used[i + 2] == 0) {
            if (x % 4 == 0) {
                b = 1;
            } else if (x % 4 == 1) {
                a = c = 1;
            } else if (x % 4 == 2) {
                a = b = 1;
            } else {
                a = b = c = 1;
            }
            x /= 4;
        } else if (used[i] + used[i + 1] + used[i + 2] == 1) {
            if (x % 2 == 0) {
                if (!used[i + 2]) {
                    c = 1;
                } else {
                    a = bool(x % 4), b = 1;
                    x /= 2;
                }
            } else if (used[i]) {
                b = c = 1;
            } else {
                a = 1;
            }
            x /= 2;
        }

        Set(i, a), Set(i + 1, b), Set(i + 2, c);
    }
}
#include "Brunolib.h"

long long Bruno(int N, int A[]) {
    long long x = 0;

    for (int i = 0; i < N; i += 3) {
        switch (A[i] * 4 + A[i + 1] * 2 + A[i + 2]) {
            case 1: {x = x * 2; break;}
            case 2: {x = x * 4; break;}
            case 3: {x = x * 2 + 1; break;}
            case 4: {x = x * 2 + 1; break;}
            case 5: {x = x * 4 + 1; break;}
            case 6: {x = x * 4 + 2; break;}
            case 7: {x = x * 4 + 3;break;}
        }
    }

    return x;
}
#Verdict Execution timeMemoryGrader output
Fetching results...