#include <bits/stdc++.h>
#include "vision.h"
using namespace std;
int distK(vector<int> v,int K){
vector<int> cur;
for(int i = 0;i + K < v.size();i++){
cur.push_back(add_and({v[i],v[i+K]}));
}
return add_or(cur);
}
void construct_network(int H, int W, int K) {
auto id = [&](int i,int j){
return i*W+j;
};
auto dist = [](int i1,int i2,int j1,int j2){
return abs(i1-i2)+abs(j1-j2);
};
vector<int> diagnal1;// top_right to bottom_down
for(int d = 0;d < H+W-1;d++){
int si,sj;
if(d < W){
si = 0,sj = d;
}else{
si = d-W+1,sj = W-1;
}
vector<int> cur;
while(si >= 0 && sj >= 0 && si < H && sj < W){
cur.push_back(id(si,sj));
sj--;
si++;
}
diagnal1.push_back(add_or(cur));
}
vector<int> diagnal2;// top_right to bottom_down
for(int d = 0;d < H+W-1;d++){
int si,sj;
if(d < W){
si = 0,sj = W-1-d;
}else{
si = d-W+1,sj = 0;
}
vector<int> cur;
while(si >= 0 && sj >= 0 && si < H && sj < W){
cur.push_back(id(si,sj));
sj++;
si++;
}
diagnal2.push_back(add_or(cur));
}
int d1K = distK(diagnal1,K);
int d2K = distK(diagnal2,K);
int samed1 = add_xor(diagnal1);
int samed2 = add_xor(diagnal2);
int case1 = add_and({d1K,d2K});
int case2 = add_and({d1K,samed2});
int case3 = add_and({samed1,d2K});
add_or({case1,case2,case3});
}
# | 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... |