Submission #109679

#TimeUsernameProblemLanguageResultExecution timeMemory
109679popovicirobertBroken Device (JOI17_broken_device)C++14
100 / 100
68 ms3144 KiB
#include "Annalib.h"
#include <bits/stdc++.h>

using namespace std;

void Anna( int N, long long X, int K, int P[] ){

    vector <int> arr(N);

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

    vector <int> sol(N, 0);

    for(int i = 0; i < N; i += 3) {

        int a = arr[i], b = arr[i + 1], c = arr[i + 2];

        if(a + b + c > 1) {
            continue;
        }

        if(a + b + c == 0) {

            if((X & 3) == 0) {
                sol[i] = 1;
            }
            else if((X & 3) == 2) {
                sol[i] = sol[i + 2] = 1;
            }
            else if((X & 3) == 1) {
                sol[i + 1] = sol[i + 2] = 1;
            }
            else if((X & 3) == 3) {
                sol[i] = sol[i + 1] = sol[i + 2] = 1;
            }
            X >>= 2;

        }
        else {

            if(b == 0) {

                if(X & 1) {

                    if(c == 0) {
                        sol[i + 2] = 1;
                    }
                    else {
                        sol[i] = sol[i + 1] = 1;
                    }

                }
                else {
                    sol[i + 1] = 1;
                }
                X >>= 1;

            }
            else {

                if(X & 1) {
                    sol[i + 2] = 1;
                    X >>= 1;
                }
                else {

                    if((X & 3) == 0) {
                        sol[i] = 1;
                    }
                    else if((X & 3) == 2) {
                        sol[i] = sol[i + 2] = 1;
                    }
                    X >>= 2;
                }

            }

        }

    }

    for(i = 0; i < N; i++) {
        Set(i, sol[i]);
    }

}
#include "Brunolib.h"
#include <bits/stdc++.h>
#define ll long long

using namespace std;

long long Bruno( int N, int A[] ){

    ll ans = 0, pw = 1;

    for(int i = 0; i < N; i += 3) {

        int val = A[i] * 4 + A[i + 1] * 2 + A[i + 2];

        if(val == 0) {
            continue;
        }

        if(val == 2) {
            pw *= 2;
            continue;
        }

        if(val == 1 || val == 6) {
            ans += pw;
            pw *= 2;
            continue;
        }

        if(val == 3) {
            ans += pw;
        }
        if(val == 4) {
            ans += 0;
        }
        if(val == 5) {
            ans += pw * 2;
        }
        if(val == 7) {
            ans += 3 * pw;
        }

        pw *= 4;

    }

    return ans;

}
#Verdict Execution timeMemoryGrader output
Fetching results...