#include <bits/stdc++.h>
#include "vision.h"
using namespace std;
void construct_network(int H, int W, int K)
{
vector<int> linii,coloane;
for(int lin=1;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=1;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> combinat;
for(int x:linii)
combinat.push_back(x);
for(int x:coloane)
combinat.push_back(x);
int zero = add_and({combinat[0],add_not(combinat[0])});
vector<int> cnt;
for(int lun=0;(1<<lun)<=(H+W-2);lun++)
cnt.push_back(zero);
//for(int x:cnt) cerr<<x<<" zzz\n";
for(int x:combinat)
{
vector<int> newcnt;
int pref = x;
for(int i=0;i<cnt.size();i++)
{
newcnt.push_back(add_xor({pref,cnt[i]}));
pref = add_and({pref,cnt[i]});
}
cnt = newcnt;
}
vector<int> rez;
for(int i=0;i<cnt.size();i++)
if((1<<i)&K)
rez.push_back(cnt[i]);
else
rez.push_back(add_not(cnt[i]));
if(rez.empty())
while(1);
add_and(rez);
}
/*
2 2 1
0 0 1 1
0 0 0 1
0 0 1 0
-1
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... |