Submission #425014

#TimeUsernameProblemLanguageResultExecution timeMemory
425014oleh1421Vision Program (IOI19_vision)C++17
58 / 100
13 ms1224 KiB
//#include "grader.cpp" #include "vision.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; void construct_network(int H, int W, int K) { int ind=H*W-1; vector<int>r,c; for (int i=0;i<H;i++){ vector<int>v; for (int j=0;j<W;j++) v.push_back(i*W+j); add_xor(v); ind++; r.push_back(ind); } for (int i=0;i<W;i++){ vector<int>v; for (int j=0;j<H;j++) v.push_back(j*W+i); add_xor(v); ind++; c.push_back(ind); } vector<int>ans; for (int dx=max(1,K-W+1);dx<=min(K-1,H-1);dx++){ int dy=K-dx; vector<int>A; for (int i=0;i+dx<H;i++){ add_and({r[i],r[i+dx]}); ind++; A.push_back(ind); } vector<int>B; for (int i=0;i+dy<W;i++){ add_and({c[i],c[i+dy]}); ind++; B.push_back(ind); } add_or(A); int orA=++ind; add_or(B); int orB=++ind; add_and({orA,orB}); ans.push_back(++ind); } if (K<H){ vector<int>A; for (int i=0;i+K<H;i++){ add_and({r[i],r[i+K]}); ind++; A.push_back(ind); } add_or(A); int orA=++ind; add_or(c); ind++; add_not(ind); int orB=++ind; add_and({orA,orB}); ans.push_back(++ind); } if (K<W){ vector<int>A; for (int i=0;i+K<W;i++){ add_and({c[i],c[i+K]}); ind++; A.push_back(ind); } add_or(A); int orA=++ind; add_or(r); ind++; add_not(ind); int orB=++ind; add_and({orA,orB}); ans.push_back(++ind); } add_or(ans); ind++; // if (K==1){ // vector<int>c,r; // // } // vector<int>v; // for (int i=0;i<H;i++){ // for (int j=0;j<W;j++){ // if (H*W>=5000 && (i || j)) continue; // vector<int>Ask; // for (int x=0;x<=K;x++){ // int y=K-x; // for (int dx:{-1,1}){ // for (int dy:{-1,1}){ // int nx=i+x*dx,ny=j+y*dy; // if (nx<0 || nx>=H || ny<0 || ny>=W) continue; // Ask.push_back(nx*W+ny); // } // } // } // if (!Ask.empty()){ // add_or(Ask); // ind++; // add_and({ind,i*W+j}); // ind++; // v.push_back(ind); // } // } // } // add_or(v); } /** 2 3 3 0 0 0 1 0 0 0 2 0 0 1 0 0 0 1 1 0 0 1 2 0 1 0 2 0 1 1 0 0 1 1 1 0 1 1 2 0 2 1 0 0 2 1 1 0 2 1 2 1 0 1 1 1 0 1 2 1 1 1 2 -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...