#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;
};
vector<int>hs(h);
int ind = h*w;
for(int i = 0;i<h;i++){
vector<int>query;
for(int j = 0;j<w;j++){
query.push_back(conv(i,j));
}
hs[i]=ind;
ind++;
add_or(query);
}
vector<int>ws(w);
for(int j = 0;j<w;j++){
vector<int>query;
for(int i = 0;i<h;i++){
query.push_back(conv(i,j));
}
ws[j]=ind;
ind++;
add_or(query);
}
int hxor = ind++;
add_xor(hs);
int wxor = ind++;
add_xor(ws);
vector<int>nx;
for(int i = 0;i<h-1;i++){
nx.push_back(ind++);
add_and({hs[i],hs[i+1]});
}
int ph = ind++;
if(nx.size()){
add_or(nx);
}
else{
ind--;
}
nx.clear();
for(int i = 0;i<w-1;i++){
nx.push_back(ind++);
add_and({ws[i],ws[i+1]});
}
int wh = ind++;
if(nx.size())
add_or(nx);
else
ind--;
nx.clear();
if(h==1||w==1)
return;
add_and({hxor,wh});
add_and({wxor,ph});
add_or({ind,ind+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... |