Submission #97562

#TimeUsernameProblemLanguageResultExecution timeMemory
97562silxikysBroken Device (JOI17_broken_device)C++14
85 / 100
71 ms3096 KiB
#include "Annalib.h"
#include <vector>

void Anna(int N, long long X, int K, int P[]) {
    int pos = 0;
    std::vector<int> ans(N,-1);
    std::vector<int> ternary;
    while (X) {
        int x = X % 3;
        ternary.push_back(x);
        X /= 3;
    }
    for (int i = 0; i < K; i++) {
        ans[P[i]] = 0;
    }
    for (int i = 0; i < N; i += 2) {
        if (ans[i] == 0 || ans[i+1] == 0) {
            ans[i] = 0;
            ans[i+1] = 0;
        }
        else {
            if (pos >= (int)ternary.size()) {
                ans[i] = 0;
                ans[i+1] = 0;
                continue;
            }
            if (ternary[pos] == 0) {
                ans[i] = 0;
                ans[i+1] = 1;
            }
            else if (ternary[pos] == 1) {
                ans[i] = 1;
                ans[i+1] = 0;
            }
            else {
                ans[i] = 1;
                ans[i+1] = 1;
            }
            pos++;
        }
    }
    for (int i = 0; i < N; i++) {
        //assert(ans[i] == 0 || ans[i] == 1);
        Set(i,ans[i]);            
    }
}
#include "Brunolib.h"
#include <vector>

long long Bruno(int N, int A[]) {
    long long ans = 0;
    long long mult = 1;
    for (int i = 0; i < N; i += 2) {
        int r = A[i] * 2 + A[i+1];
        if (r == 0) continue;
        else if (r == 1) {
            ans += mult * 0;
        }
        else if (r == 2) {
            ans += mult * 1;
        }
        else {
            ans += mult * 2;
        }
        mult *= 3;
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...