#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
void construct_network(int h, int w, int k) {
//std::vector<int> Ns;
//Ns = {0, 1};
//int a = add_and(Ns);
//Ns = {0, a};
//int b = add_or(Ns);
//Ns = {0, 1, b};
//int c = add_xor(Ns);
//add_not(c);
auto conv = [&] (int i, int j){
return i*w+j;
};
int cn = 0;
set<array<int,2>>s;
vector<array<int,2>>doen;
for(int i = 0;i<1;i++){
for(int j = 0;j<1;j++){
vector<int>quer;
for(int ai = 0;ai<=k;ai++){
int ci = i+ai;
int ji = j+(k-ai);
if(ci>=h||ji>=w||ci<0||ji<0){
continue;
}
int initi = conv(i,j);
int fini = conv(ci,ji);
if(s.find({initi,fini})!=s.end()||s.find({fini,initi})!=s.end())
continue;
quer.push_back(fini);
s.insert({initi,fini});
}
for(int ai = 0;ai<=k;ai++){
int ci = i-ai;
int ji = j+(k-ai);
if(ci>=h||ji>=w||ci<0||ji<0){
continue;
}
int initi = conv(i,j);
int fini = conv(ci,ji);
if(s.find({initi,fini})!=s.end()||s.find({fini,initi})!=s.end())
continue;
quer.push_back(fini);
s.insert({initi,fini});
}
if(quer.size()==0)
continue;
add_or(quer);
doen.push_back({i,j});
}
}
int indi = h*w;
for(array<int,2>a:doen){
int i = a[0];
int j = a[1];
add_and({indi,conv(i,j)});
indi++;
}
vector<int>quer;
for(int i = 0;i<doen.size();i++)
quer.push_back(i+indi);
add_or(quer);
}
# | 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... |