Submission #388260

#TimeUsernameProblemLanguageResultExecution timeMemory
388260LucaDantasVision Program (IOI19_vision)C++17
100 / 100
59 ms5836 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; // I need to check if the two points are at most k blocks far away // from each other in one of the diagonals and exactly k in the other constexpr int maxn = 410+10; vector<int> diagonal[maxn][2]; // 1 == x+y, 2 == x-y+shift int ok[2]; // checa se os pontos estao a uma distancia menor ou igual // a K na dimensao respectiva (salva a posicao na memoria disso) int ans_diag[maxn][2]; vector<int> tudo[2], resp; void construct_network(int H, int W, int K) { for(int i = 0; i < H; i++) { for(int j = 0; j < W; j++) { // printf("%d %d\n", i, j); diagonal[i+j][0].push_back(i*W + j); diagonal[i-j+W-1][1].push_back(i*W + j); } } // int cnt = 0; for(int i = 0; i < H+W-1; i++) { for(int type : {0, 1}) { // printf("%d %d\n", i, type); assert(diagonal[i][type].size()); int v1 = ans_diag[i][type] = add_or(diagonal[i][type]); int v2 = add_xor(diagonal[i][type]); tudo[type].push_back(add_xor({v1, v2})); // cnt += 3; } } for(int i = 0; i < H+W-1; i++) { for(int type : {0, 1}) { vector<int> checar; for(int j = 0; j <= K && i + j < H+W-1; j++) checar.push_back(ans_diag[i+j][type]); int v1 = add_or(checar); int v2 = add_xor(checar); tudo[type].push_back(add_xor({v1, v2})); // cnt += 3; } } // cnt += 2; for(int type : {0, 1}) ok[type] = add_or(tudo[type]); // printf("%d %d\n", ok[0], ok[1]); for(int i = 0; i < H+W-1; i++) { for(int type : {0, 1}) { if(i+K >= H+W-1) continue; vector<int> checar = {ans_diag[i][type], ans_diag[i+K][type]}; int v1 = add_or(checar); int v2 = add_xor(checar); resp.push_back(add_and({add_xor({v1, v2}), ok[!type]})); // cnt += 3; } } add_or(resp); // resposta final, se tem alguma // ++cnt; // printf("%d\n", cnt); }
#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...