제출 #1071574

#제출 시각아이디문제언어결과실행 시간메모리
1071574pccVision Program (IOI19_vision)C++17
100 / 100
32 ms5260 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; #define pii pair<int,int> #define fs first #define sc second const int mxn = 404; const int sh = mxn>>1; int H,W,K; int encode(int r,int c){ return r*W+c; } pii decode(int k){ return pii(k/W,k%W); } vector<int> v[mxn],vv[mxn]; int arr[mxn],brr[mxn]; void construct_network(int HH, int WW, int KK) { H = HH,W = WW,K = KK; int zero = add_xor({0,0}); int one = add_not(zero); int ans = zero; int t1 = zero; { for(int i = 0;i<H;i++){ for(int j = 0;j<W;j++){ v[i+j].push_back(encode(i,j)); } } for(int i = 0;i<mxn;i++){ if(!v[i].empty()){ arr[i] = add_or(v[i]); } } for(int i = 0;i<H+W;i++){ if(i+K>=mxn||v[i+K].empty()||v[i].empty())continue; t1 = add_or({t1,add_and({arr[i],arr[i+K]})}); } } int t2 = zero; { for(int i = 0;i<H;i++){ for(int j = 0;j<W;j++){ vv[sh+i-j].push_back(encode(i,j)); } } for(int i = 0;i<mxn;i++){ if(!vv[i].empty())brr[i] = add_or(vv[i]); } for(int i = 0;i<mxn;i++){ if(vv[i].empty()||i+K>=mxn||vv[i+K].empty())continue; t2 = add_or({t2,add_and({brr[i],brr[i+K]})}); } } int t3 = one; { for(int i = 0;i<mxn;i++){ if(vv[i].empty())continue; int tmp = one; vector<int> ban; for(int j = 0;j<mxn;j++){ if(vv[j].empty()||abs(i-j)<=K)continue; ban.push_back(brr[j]); } if(ban.empty())continue; tmp = add_or(ban); tmp = add_and({brr[i],tmp}); tmp = add_not(tmp); t3 = add_and({t3,tmp}); } } int t4 = one; { for(int i = 0;i<mxn;i++){ vector<int> ban; if(v[i].empty())continue; int tmp = one; for(int j = 0;j<mxn;j++){ if(v[j].empty()||abs(i-j)<=K)continue; ban.push_back(arr[j]); } if(ban.empty())continue; tmp = add_or(ban); tmp = add_and({arr[i],tmp}); tmp = add_not(tmp); t4 = add_and({t4,tmp}); } } ans = add_or({ans,add_and({t1,t3})}); ans = add_or({ans,add_and({t2,t4})}); return; }
#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...