Submission #151104

#TimeUsernameProblemLanguageResultExecution timeMemory
151104johuthaVision Program (IOI19_vision)C++14
100 / 100
24 ms2424 KiB
#include <vector> #include "vision.h" #include <iostream> using namespace std; struct picture { int H, W; int dignr; int ldb; int rdb; int getnr(int y, int x) { return y*W + x; } int inside(int y, int x) { return (y >= 0) && (x >= 0) && (x < W) && (y < H); } vector<int> leftdig; vector<int> rightdig; void init_dig() { vector<int> leftdig_double; vector<int> rightdig_double; for (int i = 0; i < dignr; i++) { vector<int> fields; for (int j = 0; j < H; j++) { int x = i - j; int y = j; if (!inside(y, x)) continue; fields.push_back(getnr(y, x)); } int n_in = add_or(fields); leftdig.push_back(n_in); int xr = add_xor(fields); leftdig_double.push_back(add_xor({n_in, xr})); } for (int i = W - dignr; i < W; i++) { vector<int> fields; for (int j = 0; j < H; j++) { int x = i + j; int y = j; if (!inside(y, x)) continue; fields.push_back(getnr(y, x)); } int n_in = add_or(fields); rightdig.push_back(n_in); int xr = add_xor(fields); rightdig_double.push_back(add_xor({n_in, xr})); } ldb = add_or(leftdig_double); rdb = add_or(rightdig_double); } void init(int iH, int iW) { H = iH; W = iW; dignr = H + W - 1; } int smaller(int k) { k++; vector<int> allld; int curr = add_xor({0, 0}); for (int i = 0; i < dignr; i++) { if (i - k >= 0) { curr = add_xor({curr, leftdig[i - k]}); } allld.push_back(add_and({curr, leftdig[i]})); curr = add_xor({curr, leftdig[i]}); } int inl = add_or({ldb, add_or(allld)}); allld.clear(); curr = add_xor({0, 0}); for (int i = 0; i < dignr; i++) { if (i - k >= 0) { curr = add_xor({curr, rightdig[i - k]}); } allld.push_back(add_and({curr, rightdig[i]})); curr = add_xor({curr, rightdig[i]}); } int inr = add_or({rdb, add_or(allld)}); return add_and({inl, inr}); } }; void construct_network(int H, int W, int K) { picture pic; pic.init(H, W); pic.init_dig(); add_xor({pic.smaller(K), pic.smaller(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...