#include <bits/stdc++.h>
#include "vision.h"
using namespace std;
void construct_network(int H, int W, int K)
{
K += 2;
vector<int> linii,coloane;
for(int lin=0;lin<H;lin++)
{
vector<int> v;
for(int i=0;i<=lin;i++)
for(int j=0;j<W;j++)
v.push_back(i*W+j);
int sus = add_or(v);
v.clear();
for(int i=lin;i<H;i++)
for(int j=0;j<W;j++)
v.push_back(i*W+j);
int jos = add_or(v);
linii.push_back(add_and({sus,jos}));
}
for(int col=0;col<W;col++)
{
vector<int> v;
for(int i=0;i<=col;i++)
for(int j=0;j<H;j++)
v.push_back(j*W+i);
int st = add_or(v);
v.clear();
for(int i=col;i<W;i++)
for(int j=0;j<H;j++)
v.push_back(j*W+i);
int dr = add_or(v);
coloane.push_back(add_and({st,dr}));
}
vector<int> rezs;
for(int d=0;d<W;d++)
{
vector<int> newv;
for(int i=0;i<2*(H+W);i++)
{
if(i < linii.size() && (i-d >= 0 && i-d < (int)coloane.size()))
{
newv.push_back(add_and({linii[i],coloane[i-d]}));
}
else if(i < linii.size())
{
newv.push_back(linii[i]);
}
else if(i-d >= 0 && i-d < (int)coloane.size())
{
newv.push_back(coloane[i-d]);
}
else
{
///zero
}
}
//assert((int)newv.size() >= K);
while((int)newv.size() > K)
newv.pop_back();
if(newv.size() == K) rezs.push_back(add_and(newv));
}
assert(!rezs.empty());
add_and(rezs);
}
/*
2 3 3
0 0 1 2
1 0 0 2
0 0 1 1
-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... |