Submission #1219756

#TimeUsernameProblemLanguageResultExecution timeMemory
1219756BulaBroken Device (JOI17_broken_device)C++20
100 / 100
20 ms1552 KiB
#include "Annalib.h"
#include <bits/stdc++.h>
using namespace std;

void Anna(int N, long long X, int K, int P[]){
    vector<int> vis(N), p(N);
    for(int i = 0; i < K; i++) vis[P[i]] = 1;
    for(int i = 0; i < N; i += 3){
        int cnt = vis[i] + vis[i + 1] + vis[i + 2];
        if(cnt >= 2) continue;
        int a = (X % 2), b = (X / 2) % 2;
        if(cnt == 0){
            if(a && b){
                p[i] = 1; p[i + 1] = 1; p[i + 2] = 1;
            }else if(a && !b){
                p[i] = 1; p[i + 2] = 1;
            }else if(!a && b){
                p[i + 1] = 1; p[i + 2] = 1;
            }else{
                p[i + 1] = 1;
            }
            X /= 4;
        }
        if(cnt == 1){
            if(a){
                if(vis[i + 2]){
                    p[i] = 1; p[i + 1] = 1;
                }else{
                    p[i + 2] = 1;
                }
                X /= 2;
            }else{
                if(!vis[i]){
                    p[i] = 1;
                    X /= 2;
                }else{
                    p[i + 1] = 1;
                    if(b){
                        p[i + 2] = 1;
                    }
                    X /= 4;
                }
            }
        }
    }
    for(int i = 0; i < N; i++) Set(i, p[i]);
}
//1 1 1 - 1 1
//1 1 0 - 1
//0 0 1 - 1
//1 0 1 - 1 0
//0 1 1 - 0 1
//1 0 0 - 0
//0 1 0 - 0 0 
#include "Brunolib.h"
#include <bits/stdc++.h>
using namespace std;

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