This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
//#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |