제출 #1244953

#제출 시각아이디문제언어결과실행 시간메모리
1244953kunzaZa183Vision Program (IOI19_vision)C++20
100 / 100
41 ms7960 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; void construct_network(int H, int W, int K) { auto ptoi = [&](int a, int b) { return a * W + b; }; auto itop = [&](int x) { return make_pair(x / W, x % W); }; map<int, vector<int>> add, mini; for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { add[i + j].push_back(ptoi(i, j)); mini[i - j].push_back(ptoi(i, j)); } } vector<vector<int>> avvi, mvvi; for (auto a : add) avvi.push_back(a.second); for (auto a : mini) mvvi.push_back(a.second); vector<int> aor(H + W - 1), mor(H + W - 1); for (int i = 0; i < H + W - 1; i++) aor[i] = add_or(avvi[i]), mor[i] = add_or(mvvi[i]); auto has2 = [&](vector<int> vi) { int x = add_or(vi); int y = add_xor(vi); return add_xor({x, y}); }; vector<int> ahas2(avvi.size()), mhas2(mvvi.size()); for (int i = 0; i < avvi.size(); i++) { ahas2[i] = add_xor({aor[i], add_xor(avvi[i])}); mhas2[i] = add_xor({mor[i], add_xor(mvvi[i])}); } vector<int> ares, mres; for (int i = 0; i + K < H + W - 1; i++) { vector<int> vi; for (int j = i; j <= i + K; j++) { vi.push_back(aor[j]); } vector<int> vi2 = {has2(vi)}; for (int j = i; j <= i + K; j++) { vi2.push_back(ahas2[j]); } ares.push_back(add_or(vi2)); } for (int i = 0; i + K < H + W - 1; i++) { vector<int> vi; for (int j = i; j <= i + K; j++) { vi.push_back(mor[j]); } vector<int> vi2 = {has2(vi)}; for (int j = i; j <= i + K; j++) { vi2.push_back(mhas2[j]); } mres.push_back(add_or(vi2)); } int sth1 = add_and({add_or(ares), add_or(mres)}); ares.clear(), mres.clear(); for (int i = 0; i + K - 1 < H + W - 1; i++) { vector<int> vi; for (int j = i; j <= i + K - 1; j++) { vi.push_back(aor[j]); } vector<int> vi2 = {has2(vi)}; for (int j = i; j <= i + K - 1; j++) { vi2.push_back(ahas2[j]); } ares.push_back(add_or(vi2)); } for (int i = 0; i + K - 1 < H + W - 1; i++) { vector<int> vi; for (int j = i; j <= i + K - 1; j++) { vi.push_back(mor[j]); } vector<int> vi2 = {has2(vi)}; for (int j = i; j <= i + K - 1; j++) { vi2.push_back(mhas2[j]); } mres.push_back(add_or(vi2)); } int sth2 = add_and({add_or(ares), add_or(mres)}); add_xor({sth1, sth2}); }
#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...