Submission #290941

#TimeUsernameProblemLanguageResultExecution timeMemory
290941Haunted_CppVision Program (IOI19_vision)C++17
58 / 100
22 ms2176 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; const int MAX_N = 200 + 5; int g[MAX_N][MAX_N]; void construct_network(int H, int W, int K) { for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { g[i][j] = i * W + j; } } vector<int> linha; vector<int> coluna; for (int i = 0; i < H; i++) { vector<int> ask; for (int j = 0; j < W; j++) { ask.emplace_back(g[i][j]); } linha.emplace_back(add_or(ask)); } for (int j = 0; j < W; j++) { vector<int> ask; for (int i = 0; i < H; i++) { ask.emplace_back(g[i][j]); } coluna.emplace_back(add_or(ask)); } vector<int> ans; for (int diff_linha = 1; diff_linha <= K; diff_linha++) { for (int diff_coluna = 1; diff_coluna + diff_linha <= K; diff_coluna++) { if (diff_linha + diff_coluna != K) continue; for (int i = 0; i + diff_linha < H; i++) { for (int j = 0; j + diff_coluna < W; j++) { ans.emplace_back(add_and({linha[i], linha[i + diff_linha], coluna[j], coluna[j + diff_coluna]})); } } } } // Same Row if (K < W) { vector<int> same_line; vector<int> col; for (int i = 0; i < H; i++) { vector<int> ask; for (int j = 0; j < W; j++) { ask.emplace_back(g[i][j]); } int A = add_xor(ask); int B = add_not(A); int C = linha[i]; same_line.emplace_back(add_and({B, C})); } for (int j = 0; j + K < W; j++) { col.emplace_back(add_and({coluna[j], coluna[j + K]}) ); } // HAS TO BE ONE int chk_xor = add_or(same_line); // HAS TO BE ONE int chk_col = add_or(col); // MERGE BOTH ans.emplace_back(add_and({chk_col, chk_xor})); } // Same Col if (K < H) { vector<int> same_col; vector<int> lin; for (int j = 0; j < W; j++) { vector<int> ask; for (int i = 0; i < H; i++) { ask.emplace_back(g[i][j]); } int A = add_xor(ask); int B = add_not(A); int C = coluna[j]; same_col.emplace_back(add_and({B, C})); } for (int j = 0; j + K < H; j++) { lin.emplace_back(add_and({linha[j], linha[j + K]})); } // HAS TO BE ONE int chk_xor = add_or(same_col); // HAS TO BE ONE int chk_lin = add_or(lin); // MERGE BOTH ans.emplace_back(add_and({chk_xor, chk_lin})); } add_or(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...