Submission #146908

#TimeUsernameProblemLanguageResultExecution timeMemory
146908dennisstarVision Program (IOI19_vision)C++17
100 / 100
36 ms3452 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; typedef vector<int> vim; int chk[40010]; vim ans; int H, W; void f(int K) { vim Ns; vim x, y, z; int i, j, k; for (i=0; i<H*W; i++) Ns.push_back(i); int no=add_xor(Ns); if (H+W-2<K) { ans.push_back(no); return ; } k=0; for (i=0; i<H+W-1; i++) { Ns={}; for (j=max(0, i-W+1); j<H&&(i-j)<W&&j<=i; j++, k++) Ns.push_back(W*j+(i-j)); x.push_back(add_or(Ns)); } if (k!=H*W) { puts("Error 1"); printf("%d", 1/0); } k=0; for (i=-W+1; i<H; i++) { Ns={}; for (j=max(i, 0); j<H&&j-i<W; j++, k++) Ns.push_back(j*(W+1)-i); y.push_back(add_or(Ns)); } if (k!=H*W) { puts("Error 1"); printf("%d", 1/0); } int a1[410], a2[410]; a1[H+W-2]=add_or({x[H+W-2]}); for (i=H+W-3; i>=K; i--) { a1[i]=add_or({a1[i+1],x[i]}); } a2[0]=add_or({x[0]}); for (i=1; i<H+W-1-K; i++) { a2[i]=add_or({a2[i-1],x[i]}); } z.push_back(add_and({a1[K], x[0]})); int n1, n2; for (i=1; i<H+W-1; i++) { n1=n2=-1; if (i+K<H+W-2) n1=a1[i+K]; if (i>=K) n2=a2[i-K]; if (n1==-1&&n2==-1) continue; else if (n1==-1&&n2!=-1) n1=n2; else if (n2!=-1&&n2!=-1) n1=add_or({n1, n2}); z.push_back(add_and({n1, x[i]})); } a1[H+W-2]=add_or({y[H+W-2]}); for (i=H+W-3; i>=K; i--) { a1[i]=add_or({a1[i+1],y[i]}); } a2[0]=add_or({y[0]}); for (i=1; i<H+W-1-K; i++) { a2[i]=add_or({a2[i-1],y[i]}); } z.push_back(add_and({a1[K], y[0]})); for (i=1; i<H+W-1; i++) { n1=n2=-1; if (i+K<H+W-2) n1=a1[i+K]; if (i>=K) n2=a2[i-K]; if (n1==-1&&n2==-1) continue; else if (n1==-1&&n2!=-1) n1=n2; else if (n2!=-1&&n2!=-1) n1=add_or({n1, n2}); z.push_back(add_and({n1, y[i]})); } ans.push_back(add_or(z)); } void construct_network(int h, int w, int K) { ans={}; H=h, W=w; f(K); f(K+1); ans[1]=add_not(ans[1]); add_and(ans); }

Compilation message (stderr)

vision.cpp: In function 'void f(int)':
vision.cpp:27:17: warning: division by zero [-Wdiv-by-zero]
   printf("%d", 1/0);
                ~^~
vision.cpp:37:17: warning: division by zero [-Wdiv-by-zero]
   printf("%d", 1/0);
                ~^~
#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...