제출 #1243290

#제출 시각아이디문제언어결과실행 시간메모리
1243290banganVision Program (IOI19_vision)C++20
58 / 100
29 ms2456 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define MT make_tuple void brute_force(int h, int w, int k) { int n = h*w; set<tuple<int, int, int, int>> S; for (int r1=0; r1<h; r1++) for (int c1=0; c1<w; c1++) { for (int r2=0;r2<h; r2++) for (int c2=0; c2<w; c2++) { if (abs(r1-r2) + abs(c1-c2) == k) { tuple T1 = MT(r1, c1, r2, c2); tuple T2 = MT(r2, c2, r1, c1); if (S.contains(T1) || S.contains(T2)) continue; S.insert(T1); S.insert(T2); int x = r1*w + c1; int y = r2*w + c2; add_and({x, y}); n++; } } } vector<int> vec; for (int i=h*w; i<n; i++) vec.pb(i); add_or(vec); } void k_one(int h, int w, int k) { if (min(h, w) == 1) { brute_force(h, w, k); return; } auto f = [&](int r, int c) -> int { return r*w + c; }; int n = h*w; for (int r=0; r<h; r++) { vector<int> vec; for (int c=0; c<w; c++) vec.pb(f(r, c)); add_xor(vec); n++; } for (int c=0; c<w; c++) { vector<int> vec; for (int r=0; r<h; r++) vec.pb(f(r, c)); add_xor(vec); n++; } vector<int> A, B; for (int i = h*w; i+1 < h*w+h; i++) { A.pb(add_and({i, i+1})); n++; } for (int i = h*w+h; i+1 < h*w+h+w; i++) { B.pb(add_and({i, i+1})); n++; } add_or(A); n++; add_or(B); n++; A.clear(); B.clear(); for (int i = h*w; i < h*w+h; i++) A.pb(i); for (int i = h*w+h; i < h*w+h+w; i++) B.pb(i); add_or(A); n++; add_or(B); n++; add_not({n-1}); add_not({n-2}); n += 2; add_and({n-1, n-5}); add_and({n-2, n-6}); n += 2; add_xor({n-1, n-2}); } void construct_network(int h, int w, int k) { if (k==1) { k_one(h, w, k); return; } auto f = [&](int r, int c) -> int { return r*w + c; }; vector<int> imp; for (int r=0; r<h; r++) for (int c=0; c<w; c++) { vector<int> vec; for (int i=r; i<h; i++) for (int j=0; j<w; j++) if (abs(i-r) + abs(j-c) == k) vec.pb(f(i, j)); if (vec.empty()) continue; int t = add_or(vec); imp.pb(add_and({t, f(r, c)})); } add_or(imp); }
#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...