제출 #724299

#제출 시각아이디문제언어결과실행 시간메모리
724299GrandTiger1729Vision Program (IOI19_vision)C++17
100 / 100
26 ms2384 KiB
#include "vision.h" #ifndef EVAL #include "grader.cpp" #endif #include <bits/stdc++.h> using namespace std; void construct_network(int n, int m, int K){ auto valid = [&](int i, int j) -> int { return 0 <= i && i < n && 0 <= j && j < m; }; auto idx = [&](int i, int j) -> int { return i * m + j; }; int N = n + m - 1; vector<int> res1, res2; auto solve = [&](int x1, int y1, int x2, int y2, int dx, int dy){ vector<int> a(N), b(N); for (int i = 0; i < N; i++){ vector<int> qry; for (int j = 0; j <= i; j++){ int xx = x1 + dx * j, yy = y1 + dy * (i - j); if (valid(xx, yy)) qry.push_back(idx(xx, yy)); } a[i] = add_or(qry); } for (int i = 0; i < N; i++){ vector<int> qry; for (int j = 0; j <= i; j++){ int xx = x2 - dx * j, yy = y2 - dy * (i - j); if (valid(xx, yy)) qry.push_back(idx(xx, yy)); } b[i] = add_or(qry); } vector<int> pa(N), pb(N); pa[0] = a[0], pb[0] = b[0]; for (int i = 1; i < N; i++) pa[i] = add_or({pa[i - 1], a[i]}); for (int i = 1; i < N; i++) pb[i] = add_or({pb[i - 1], b[i]}); vector<int> yes, no; for (int i = 0; i < N; i++){ vector<int> qry; if (i - K >= 0) qry.push_back(a[i - K]); if (i + K < N) qry.push_back(b[N - 1 - (i + K)]); if (qry.size()) yes.push_back(add_and({a[i], add_or(qry)})); } for (int i = 0; i < N; i++){ vector<int> qry; if (i - (K + 1) >= 0) qry.push_back(pa[i - (K + 1)]); if (i + (K + 1) < N) qry.push_back(pb[N - 1 - (i + (K + 1))]); if (qry.size()) no.push_back(add_and({a[i], add_or(qry)})); } if (yes.size()) res1.push_back(add_or(yes)); if (no.size()) res2.push_back(add_or(no)); }; solve(0, 0, n - 1, m - 1, 1, 1); solve(n - 1, 0, 0, m - 1, -1, 1); if (res1.empty()) add_and({add_xor({0, 0})}); else if (res2.empty()) add_and({add_or(res1)}); else add_and({add_or(res1), add_not(add_or(res2))}); }
#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...