Submission #1263221

#TimeUsernameProblemLanguageResultExecution timeMemory
1263221silentloopBit Shift Registers (IOI21_registers)C++20
22 / 100
1 ms328 KiB
#include <bits/stdc++.h>
using namespace std;
#define forn(i, n) for (int i = 0; i < int(n); i++)
#define pb push_back
#define mp make_pair
#define fst first
#define snd second
#define all(x) (x).begin(), (x).end()
#define sz(x) int((x).size())
#define ll long long

void append_move(int t, int x);
void append_store(int t, std::vector<bool> v);
void append_and(int t, int x, int y);
void append_or(int t, int x, int y);
void append_xor(int t, int x, int y);
void append_not(int t, int x);
void append_left(int t, int x, int s);
void append_right(int t, int x, int s);
void append_add(int t, int x, int y);
void append_print(int t);
int B=2000;

int open(int &sig, int k, int op, int act)
{
    int i, tam=1, ant;
    k=k-act;
    ant=op;
    if(k==1)
    {
        return op;
    }
    while(tam*2<=k)
    {
        sig++;
        append_right(sig,ant,tam);
        append_or(sig,ant,sig);
        ant=sig;
        tam=tam*2;
    }

    if(tam<k)
    {
        sig++;
        append_right(sig,ant,abs(tam-k));
        append_or(sig,sig,ant);
    }
    return sig;
}

void construct_instructions(int s, int n, int k, int q)
{

    int i, j, act=0, sig, uno, allUno, op, a, in;
    
    sig=1;
    vector<int>pert(k,0), pref(k,0), pert2(k,0);
    vector<bool> v2(B,1);
    for(i=0; i<k; i++)
    {
        act=k-(i+1);
        vector<bool>v(B,0),v3(B,1);
        for(j=0; j<n; j++)
        {
            v[act]=1;
            v3[act]=0;
            act+=k;
        }
        sig++;
        pert2[i]=sig;
        append_store(sig,v3);
        if(i==1)
            pref[i]=pert2[i-1];
        else
        {
            sig++;
            pref[i]=sig;
            append_store(sig,v2);

        }

        act=k-(i+1);
        for(j=0; j<n; j++)
        {
            v2[act]=0;
            act+=k;
        }
    }
    vector<bool>v(B,0);
    v[0]=1;
    sig++;
    uno=sig;
    append_store(sig,v);

    for(i=0; i<B; i++)
        v[i]=1;
    sig++;
    allUno=pref[0];
    in=sig;
    for(i=0; i<k; i++)
    {
        sig=in;

        sig++;
        append_or(sig,0,pert2[i]);
        
        sig++;
        op=sig;
        append_xor(sig,sig-1,allUno);
        
        sig++;
        append_add(sig,sig-2,uno);
        sig++;
        append_right(sig,sig-1,B-1);
        sig++;
        a=sig;
        append_add(sig,allUno,sig-1);
        
        sig++;
        append_or(sig,open(sig, k, op, i),a);
        
        sig++;
        append_not(sig,sig-1);
        append_and(sig,sig,pref[i]);
        append_or(0,0,sig);
    }

    sig++;
    append_not(sig,0);
    int ant, tam=n;
    while(tam>1)
    {
        ant=tam;
        tam=(tam+1)/2;

        sig++;
        append_right(sig,sig-1,tam*k);

        sig++;
        append_or(sig,sig-1,sig-2);
    }

    append_not(0,sig);

    /*forn(i, sig+1)
        append_print(i);*/
}
#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...