Submission #947002

#TimeUsernameProblemLanguageResultExecution timeMemory
947002sleepntsheepVision Program (IOI19_vision)C++17
100 / 100
15 ms2008 KiB
#include "vision.h"
#include<vector>

using namespace std;
using V=std::vector<int>;

int F,T,KK;

int adder(int x,int c)
{
    for(int i=0;i<9;++i)
    {
        add_xor(V{x+2*i,c});
        c=add_and(V{x+2*i,c});
    }
    return c-17;
}

int alloc()
{
    int c=add_not(F)+1;
    for(int i=0;i<18;++i)
        add_not(T);
    return c;
}

void construct_network(int H, int W, int K)
{
    add_not(0);
    F=add_and(V{0,H*W});
    T=add_not(F);
    KK=alloc();
    int run=alloc();

    for(int i=0;i<H;++i)
    {
        V e;
        for(int j=0;j<W;++j)e.push_back(i*W+j);
        int rr=add_xor(e);
        run=add_xor(V{run,rr});
        KK=adder(KK,run);
    }

    for(int i=0;i<W;++i)
    {
        V e;
        for(int j=0;j<H;++j)e.push_back(j*W+i);
        int rr=add_xor(e);
        run=add_xor(V{run,rr});
        KK=adder(KK,run);
    }

    V ans;
    for(int i=0;i<9;++i)
        ans.push_back(add_not(add_xor(V{KK+2*i,(K&(1<<i))?T:F})));
    add_and(ans);
}

#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...