제출 #286203

#제출 시각아이디문제언어결과실행 시간메모리
286203MKopchevVision Program (IOI19_vision)C++14
100 / 100
23 ms1788 KiB
#include "vision.h"
#include <bits/stdc++.h>

using namespace std;

int pointer;

int n,m;

int ask(int x,int y)
{
    return (x-1)*m+y-1;
}

vector<int> bits;

int SZ;

int mem_zero;

void add(int where)
{
    int naum=where;

    for(int i=0;i<SZ;i++)
    {
        int new_bits=add_xor({naum,bits[i]});

        int new_naum=add_and({naum,bits[i]});

        bits[i]=new_bits;

        naum=new_naum;
    }
}
void add_zero()
{
    pointer=add_xor({0,0});

    bits.push_back(pointer);
}

void construct_network(int H,int W,int K)
{
    n=H;
    m=W;

    pointer=n*m-1;

    bits={};
    SZ=0;

    while((1<<SZ)<=n+m)SZ++;

    for(int i=0;i<SZ;i++)
        add_zero();

    mem_zero=bits[0];

    int cur=mem_zero;

    for(int i=1;i<=n;i++)
    {
        vector<int> to_ask={cur};

        for(int j=1;j<=m;j++)
        {
            to_ask.push_back(ask(i,j));
        }

        pointer=add_xor(to_ask);

        cur=pointer;

        add(cur);
    }

    cur=mem_zero;

    for(int j=1;j<=m;j++)
    {
        vector<int> to_ask={cur};

        for(int i=1;i<=n;i++)
        {
            to_ask.push_back(ask(i,j));
        }

        pointer=add_xor(to_ask);

        cur=pointer;

        add(cur);
    }

    vector<int> to_ret={};

    for(int i=0;i<SZ;i++)
        if((K&(1<<i)))to_ret.push_back(bits[i]);
        else to_ret.push_back(add_not(bits[i]));

    add_and(to_ret);
}
#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...