This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "vision.h"
#include <bits/stdc++.h>
//#include "grader.cpp"
using namespace std;
vector<int> lins,cols;
vector<int> dlin[505],dcol[505];
int d1[505],d2[505],ind,nr[505],zero;
void construct_network(int H, int W, int K)
{
if(min(H,W)==1)
{
H=max(H,W);
vector<int> v;
int cnt=0;
for(int i=0;i+K<H;i++)
{
v={i,i+K};
add_and(v);
cnt++;
}
v.clear();
for(int i=H;i<H+cnt;i++)
v.push_back(i);
assert(v.size()==cnt);
add_or(v);
return;
}
ind=H*W-1;
for(int i=0;i<H;i++)
{
vector<int> v;
for(int j=0;j<W;j++)
v.push_back(i*W+j);
add_or(v);
ind++;
lins.push_back(ind);
}
for(int j=0;j<W;j++)
{
vector<int> v;
for(int i=0;i<H;i++)
v.push_back(i*W+j);
add_or(v);
ind++;
cols.push_back(ind);
}
K+=2;
K=H+W-K;
vector<int> v1,v2,vals;
vector<int> a;
for(int i=0;i<H;i++)
{
a.push_back(lins[i]);
ind++;
add_or(a);
add_not(ind);
ind++;
v1.push_back(ind);
}
a.clear();
for(int i=H-1;i>=0;i--)
{
a.push_back(lins[i]);
ind++;
add_or(a);
add_not(ind);
ind++;
v2.push_back(ind);
}
reverse(v2.begin(),v2.end());
for(int i=0;i<H;i++)
{
vector<int> pp={v1[i],v2[i]};
add_or(pp);
ind++;
vals.push_back(ind);
}
v1.clear();
v2.clear();
a.clear();
for(int i=0;i<W;i++)
{
a.push_back(cols[i]);
ind++;
add_or(a);
add_not(ind);
ind++;
v1.push_back(ind);
}
a.clear();
for(int i=W-1;i>=0;i--)
{
a.push_back(cols[i]);
ind++;
add_or(a);
add_not(ind);
ind++;
v2.push_back(ind);
}
reverse(v2.begin(),v2.end());
for(int i=0;i<W;i++)
{
vector<int> pp={v1[i],v2[i]};
add_or(pp);
ind++;
vals.push_back(ind);
}
vector<int> z;
for(int i=0;i<H*W;i++)
z.push_back(i);
ind++;
add_xor(z);
zero=ind;
for(int i=0;i<8;i++)
{
vector<int> pp={zero};
add_and(pp);
ind++;
nr[i]=ind;
}
for(int i:vals)
{
int t=i;
for(int j=0;j<8;j++)
{
vector<int> pp={nr[j],t};
add_xor(pp);
ind++;
int cif=ind;
add_and(pp);
ind++;
nr[j]=cif;
t=ind;
}
}
vector<int> cand;
for(int j=0;j<8;j++)
{
if((K>>j)&1)
cand.push_back(nr[j]);
else
{
add_not(nr[j]);
ind++;
cand.push_back(ind);
}
}
add_and(cand);
}
Compilation message (stderr)
In file included from /usr/include/c++/10/cassert:44,
from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
from vision.cpp:2:
vision.cpp: In function 'void construct_network(int, int, int)':
vision.cpp:25:24: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
25 | assert(v.size()==cnt);
| ~~~~~~~~^~~~~
# | 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... |