Submission #1159001

#TimeUsernameProblemLanguageResultExecution timeMemory
1159001thelegendary08Broken Device (JOI17_broken_device)C++17
100 / 100
22 ms1524 KiB
#include "Annalib.h"
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
void Anna( int N, long long X, int K, int P[] ){
    vector<bool>broken(N);
    for(int i = 0; i<K; i++){
        broken[P[i]] = 1;
    }


    vector<int>digits;
    while(X != 0){
        digits.pb(X % 2);
        X /= 2;
    }

    int ptr = 0;
    for(int i = 0; i<N; i+=3){
        int bc = broken[i] + broken[i+1] + broken[i+2];
        if(bc > 1){
            Set(i, 0);
            Set(i+1, 0);
            Set(i+2, 0);
        }
        else{
            if(ptr != digits.size()){
                if(bc == 0){
                    if(ptr == digits.size() - 1){
                        if(digits[ptr] == 0){
                            Set(i,0);
                            Set(i+1,1);
                            Set(i+2,0);
                        }
                        else{
                            Set(i,1);
                            Set(i+1,1);
                            Set(i+2,0);
                        }
                        ptr = digits.size();
                    }
                    else{
                        if(digits[ptr] == 0 && digits[ptr+1] == 0){
                            Set(i,1);
                            Set(i+1,0);
                            Set(i+2,1);
                        }
                        else if(digits[ptr] == 0 && digits[ptr+1] == 1){
                            Set(i,1);
                            Set(i+1,0);
                            Set(i+2,0);
                        }
                        else if(digits[ptr] == 1 && digits[ptr+1] == 0){
                            Set(i,0);
                            Set(i+1,1);
                            Set(i+2,1);
                        }
                        else{
                            Set(i,1);
                            Set(i+1, 1);
                            Set(i+2, 1);
                        }
                        ptr+=2;
                    }
                }
                else{
                    if(broken[i]){
                        if(digits[ptr] == 0){
                            Set(i,0);
                            Set(i+1, 1);
                            Set(i+2, 0);
                        }
                        else{
                            Set(i,0);
                            Set(i+1, 0);
                            Set(i+2, 1);
                        }
                        ptr++;
                    }
                    else if(broken[i+1]){
                        if(digits[ptr] == 0){
                            if(ptr == digits.size() - 1 || digits[ptr + 1] == 0){
                                Set(i,1);
                                Set(i+1, 0);
                                Set(i+2, 1);
                            }
                            else{
                                Set(i,1);
                                Set(i+1, 0);
                                Set(i+2, 0);
                            }
                            ptr+=2;
                        }
                        else{
                            Set(i,0);
                            Set(i+1, 0);
                            Set(i+2, 1);
                            ptr++;
                        }
                    }
                    else{
                        if(digits[ptr] == 0){
                            Set(i,0);
                            Set(i+1, 1);
                            Set(i+2, 0);
                        }
                        else{
                            Set(i,1);
                            Set(i+1, 1);
                            Set(i+2, 0);
                        }
                        ptr++;
                    }
                }
            }
            else{
                Set(i, 0);
                Set(i+1, 0);
                Set(i+2, 0);
            }
        }
    }
}
#include "Brunolib.h"
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
long long Bruno( int N, int A[] ){
    vector<int>digits;
    for(int i = 0; i<N; i+=3){
        int num = A[i] * 4 + A[i+1] * 2 + A[i+2];
        switch(num){
            case 1:
                digits.pb(1);
                break;
            case 2:
                digits.pb(0);
                break;
            case 3:
                digits.pb(1);
                digits.pb(0);
                break;
            case 4:
                digits.pb(0);
                digits.pb(1);
                break;
            case 5:
                digits.pb(0);
                digits.pb(0);
                break;
            case 6:
                digits.pb(1);
                break;
            case 7:
                digits.pb(1);
                digits.pb(1);
                break;
        }
    }
    long long int cur = 1;
    long long int ans = 0;
    for(auto u : digits){
        ans += u * cur;
        cur *= 2;
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...