제출 #1237996

#제출 시각아이디문제언어결과실행 시간메모리
1237996Ghulam_JunaidVision Program (IOI19_vision)C++20
100 / 100
16 ms3404 KiB
#include <bits/stdc++.h>
#include "vision.h"
// #include "grader.cpp"
using namespace std;

int h, w, k, cur, diag_inds[2][400], diag_or[2][400], diag_isk[2], exist_ink[2][400], parity_ink[2][400], diag_lk[2][400], diag_isz[2], diag_islk[2];
vector<int> diags[2][400]; 

int get_id(int x, int y){
    return x * w + y;
}

int dist(int r1, int c1, int r2, int c2){
    return abs(r1 - r2) + abs(c1 - c2);
}

void construct_network(int H, int W, int K) {
	h = H, w = W, k = K, cur = h * w;
    for (int r = 0; r < h; r ++){
        for (int c = 0; c < w; c ++){
            diags[0][dist(0, 0, r, c)].push_back(get_id(r, c));
            diags[1][dist(0, w - 1, r, c)].push_back(get_id(r, c));
        }
    }
    for (int id : {0, 1}){
        for (int i = 0; i <= h + w - 2; i ++)
            diag_inds[id][i] = add_or(diags[id][i]);
        
        vector<int> vec;
        for (int i = 0; i + k <= h + w - 2; i ++){
            diag_or[id][i] = add_and({diag_inds[id][i], diag_inds[id][i + k]});
            vec.push_back(diag_or[id][i]);
        }
        diag_isk[id] = add_or(vec);

        vec.clear();
        for (int i = 0; i <= h + w - 2; i ++)
            vec.push_back(diag_inds[id][i]);
        diag_isz[id] = add_xor(vec);

        vector<int> overall_lk;
        vec.clear();
        for (int i = 0; i + k <= h + w - 2; i ++){
            vec.clear();
            for (int j = i; j <= i + k; j ++)
                vec.push_back(diag_inds[id][j]);
            exist_ink[id][i] = add_or(vec);
            parity_ink[id][i] = add_not(add_xor(vec));
            diag_lk[id][i] = add_and({exist_ink[id][i], parity_ink[id][i]});
            overall_lk.push_back(diag_lk[id][i]);
        }
        overall_lk.push_back(diag_isz[id]);
        diag_islk[id] = add_or(overall_lk);
    }

    int one_eq = add_or({diag_isk[0], diag_isk[1]});
    int both_lk = add_and({diag_islk[0], diag_islk[1]});
    int final_res = add_and({one_eq, both_lk});
}
#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...