Submission #1013323

#TimeUsernameProblemLanguageResultExecution timeMemory
1013323bachhoangxuanBit Shift Registers (IOI21_registers)C++17
100 / 100
1 ms604 KiB
#include "registers.h"
#include<bits/stdc++.h>
using namespace std;
const int ALL = 99;
const int ONE = 98;
const int ALT = 97;
const int B = 2000;

void construct_instructions(int s, int n, int k, int q) {
    vector<bool> v(B);
    for(int i=0;i<B;i+=2*k) v[i]=1;
    append_store(ONE,v);
    for(int i=0;i+k<=B;i+=2*k) for(int j=0;j<k;j++) v[i+j]=1;
    append_store(ALT,v);
    for(int i=0;i<B;i++) v[i]=(i>=n*k);
    append_store(ALL,v);
    append_or(0,0,ALL);

    auto f = [&](int d){
        if(!s) append_right(1,0,d);
        append_and(1,1,ALT);
        append_and(0,0,ALT);
        append_not(2,1);
        append_add(2,0,2);
        append_right(2,2,k);
        append_and(2,2,ONE);
        append_add(2,2,ALT);
        append_not(3,2);
        append_and(5,1,2);
        append_and(6,0,3);
        if(!s) return append_or(0,5,6);
        append_or(6,5,6);
        append_and(3,1,3);
        append_and(2,0,2);
        append_or(3,2,3);
    };
    if(!s){
        int d=k;
        while(n>1) f(d),d<<=1,n=(n+1)/2;
        return;
    }
    for(int i=0;i<n;i++){
        if(i&1) append_left(1,0,k);
        else append_right(1,0,k);
        f(k);
        if(i&1) append_right(6,6,k);
        else append_left(3,3,k);
        append_or(0,3,6);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...