Submission #1197505

#TimeUsernameProblemLanguageResultExecution timeMemory
1197505MateiKing80Vision Program (IOI19_vision)C++20
100 / 100
17 ms1352 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; using ll = long long; int add_or(int x, int y) { return add_or(vector<int>({x, y})); } int add_and(int x, int y) { return add_and(vector<int>({x, y})); } const int N = 210; int su[2 * N], di[2 * N]; int ls[2 * N], rs[2 * N], ld[2 * N], rd[2 * N]; void construct_network(int h, int w, int k) { for (int q = 0; q <= h + w - 2; q ++) { vector<int> ss, dd; for (int i = 0; i < h; i ++) { for (int j = 0; j < w; j ++) { if (i + j == q) ss.push_back(i * w + j); if (i + w - 1 - j == q) dd.push_back(i * w + j); } } su[q] = add_or(ss); di[q] = add_or(dd); } ls[0] = su[0], ld[0] = di[0], rs[h + w - 2] = su[h + w - 2], rd[h + w - 2] = di[h + w - 2]; for (int i = 1; i <= h + w - 2; i ++) { ls[i] = add_or(su[i], ls[i - 1]); ld[i] = add_or(di[i], ld[i - 1]); } for (int i = h + w - 3; i >= 0; --i) { rs[i] = add_or(su[i], rs[i + 1]); rd[i] = add_or(di[i], rd[i + 1]); } int one = add_or(0, add_not(0)); int zero = add_not(one); vector<int> eq = {zero}, gr = {zero}; for (int i = 0; i + k <= h + w - 2; i ++) { eq.push_back(add_and(su[i], su[i + k])); eq.push_back(add_and(di[i], di[i + k])); } for (int i = 0; i + k < h + w - 2; i ++) { gr.push_back(add_and(su[i], rs[i + k + 1])); gr.push_back(add_and(di[i], rd[i + k + 1])); } int eq_flag = add_or(eq); int gr_flag = add_not(add_or(gr)); add_and(eq_flag, gr_flag); }
#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...