Submission #825765

#TimeUsernameProblemLanguageResultExecution timeMemory
825765errayVision Program (IOI19_vision)C++17
100 / 100
21 ms2148 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; void construct_network(int H, int W, int K) { //debug(H, W, K); int rows = H * W; for (int i = 0; i < H; ++i) { vector<int> ask(W); for (int j = 0; j < W; ++j) { ask[j] = i * W + j; } add_or(ask); } int cols = H * W + H; for (int j = 0; j < W; ++j) { vector<int> ask(H); for (int i = 0; i < H; ++i) { ask[i] = i * W + j; } add_or(ask); } auto Add_zero = [&] { return add_xor({0, 0}); }; const int BITS = __lg(H + W + 2) + 1; vector<int> sum(BITS); for (int i = 0; i < BITS; ++i) { sum[i] = Add_zero(); } auto Solve = [&](int start, int N) { vector<int> ask; vector<int> prefs; for (int i = 0; i < N; ++i) { ask.push_back(start + i); prefs.push_back(add_xor(ask)); } int not_zero = add_not(prefs.back()); for (int i = 0; i < N; ++i) { int carry = add_and({not_zero, prefs[i]}); for (int b = 0; b < BITS; ++b) { int new_carry = add_and({sum[b], carry}); sum[b] = add_xor({sum[b], carry}); swap(carry, new_carry); } } }; Solve(rows, H); Solve(cols, W); vector<int> K_bits(BITS); int zero = Add_zero(); int one = add_not(zero); int ans = Add_zero(); for (int b = 0; b < BITS; ++b) { ans = add_or({ans, add_xor({((K >> b) % 2 ? one : zero), sum[b]})}); } add_not(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...