# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
305524 | azberjibiou | Vision Program (IOI19_vision) | C++17 | 0 ms | 0 KiB |
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>
using namespace std;
void construct_network(int H, int W, int K) {
vector <int> v;
for(int i=0;i<H;i++)
{
v.clear();
for(int j=0;j<W;j++)
{
v.push_back(W*i+j);
}
add_or(v);
}
for(int i=0;i<W;i++)
{
v.clear();
for(int j=0;j<H;j++)
{
v.push_back(W*j+i);
}
add_or(v);
}
vector <int> Hh, Ww, tmp;
Hh.resize(H), Ww.resize(W);
for(int i=1;i<H;i++)
{
if(i>K) break;
v.clear();
for(int j=0;j<H-i;j++)
{
v.push_back(add_and({HW+j, HW+i+j}));
}
Hh[i]=add_or(v);
}
v.clear();
for(int i=0;i<H;i++) v.push_back(H*W+i);
Hh[0]=add_xor(v);
for(int i=1;i<W;i++)
{
if(i>K) break;
v.clear();
for(int j=0;j<W-i;j++)
{
v.push_back(add_and({H*W+H+j, H*W+H+i+j}));
}
Ww[i]=add_or(v);
}
v.clear();
for(int i=0;i<W;i++) v.push_back(H*W+H+i);
Ww[0]=add_xor(v);
v.clear();
for(int i=0;i<=K;i++)
{
if(i>=H || K-i>=W) continue;
v.push_back(add_and({Hh[i], Ww[K-i]}));
}
add_or(tmp);
}