제출 #300960

#제출 시각아이디문제언어결과실행 시간메모리
300960MickyOrVision Program (IOI19_vision)C++17
0 / 100
60 ms6004 KiB
#include "vision.h" #include <bits/stdc++.h> #define fore(i, b, e) for (int i = b; i < (int)e; ++i) #define pb push_back using namespace std; typedef vector<int> vi; vi diagL[410], diagR[410]; int solve(int H, int W, int k) { vi resR, resL; vi v, pref; fore(i, 0, H+W-1) { v.pb(add_or(diagL[i])); pref.pb(add_or(v)); if (i > 0) { if (i >= k) { int tmp = add_xor({pref[i-1], pref[i-k]}); resL.pb( add_and({v.back(), tmp}) ); } else if (i == k-1) { resL.pb( add_and({v.back(), pref[i-1]}) ); } } } v.clear(); pref.clear(); fore(i, 0, H+W-1) { v.pb(add_or(diagR[i])); pref.pb(add_or(v)); if (i > 0) { if (i >= k) { int tmp = add_xor({pref[i-1], pref[i-k]}); resR.pb( add_and({v.back(), tmp}) ); } else if (i == k-1) { resR.pb( add_and({v.back(), pref[i-1]}) ); } } } int rL = add_or(resL); int rR = add_or(resR); return add_and({rL, rR}); } void construct_network(int H, int W, int K) { fore(i, 0, H) { fore(j, 0, W) { diagL[i+j].pb(i*W + j); diagR[i-j+W-1].pb(i*W + j); } } if (H+W-2 == K) { assert(false); add_not(solve(H, W, K)); } else { add_xor({solve(H, W, K), solve(H, W, K+1)}); } }
#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...