제출 #478396

#제출 시각아이디문제언어결과실행 시간메모리
478396blueVision Program (IOI19_vision)C++17
100 / 100
71 ms5836 KiB
#include "vision.h"
#include <vector>
#include <iostream>
using namespace std;

int check(int H, int W, int K) //check if dist <= K
{
    vector<int> main_list[450];
    vector<int> opp_list[450];
    for(int i = 0; i < H*W; i++)
    {
        main_list[i/W + int(i%W)].push_back(i);
        opp_list[i/W - int(i%W) + W-1].push_back(i);
    }

    vector<int> main_curr, main_prev, opp_curr, opp_prev;
    vector<int> res;

    for(int d = 0; d <= H+W-2; d++)
    {
        //main
        main_curr.push_back(add_or(main_list[d]));
        main_prev.push_back(add_or(main_curr));
        if(d-K >= 0)
            res.push_back(add_and({main_curr[d], main_prev[d-K]}));

        opp_curr.push_back(add_or(opp_list[d]));
        opp_prev.push_back(add_or(opp_curr));
        if(d-K >= 0)
            res.push_back(add_and({opp_curr[d], opp_prev[d-K]}));
    }

    return add_or(res);
}

void construct_network(int H, int W, int K)
{
    if(K == H+W-2) check(H, W, K);
    else add_xor({check(H, W, K), check(H, W, K+1)});
}
#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...