Submission #154398

#TimeUsernameProblemLanguageResultExecution timeMemory
154398rama_pangVision Program (IOI19_vision)C++14
100 / 100
54 ms6004 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; int solve(int H, int W, int K) { vector<int> distX[500], distY[500]; //X = upper left, Y = upper right for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { distX[i + j].push_back(i * W + j); distY[i + W - j - 1].push_back(i * W + j); } } vector<int> X, Y, allX, allY, exist; //find out if there if distance between the black squares for (int i = 0; i < H + W - 1; i++) { //are AT LEAST K X.push_back(add_or(distX[i])); Y.push_back(add_or(distY[i])); allX.push_back(add_or(X)); allY.push_back(add_or(Y)); if (i >= K) { exist.push_back(add_and({X[i], allX[i - K]})); exist.push_back(add_and({Y[i], allY[i - K]})); } } return add_or(exist); } void construct_network(int H, int W, int K) { if (H + W - 2 == K) solve(H, W, K); //if distance >= K, it is valid if distanc == K -> distance < K + 1 else add_xor({solve(H, W, K), solve(H, W, K + 1)}); //thus if solve(H, W, K) = true, them solve(H, W, K + 1) = false if the question is valid }
#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...