# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
164563 | NachoLibre | Vision Program (IOI19_vision) | C++14 | 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 <bits/stdc++.h>
using namespace std;
#include "vision.h"
int h, w, c0, c1, d;
int pti(int i, int j) {
return w * i + j;
}
vector<int> md (int i, int d) {
/* 0 - /
1 - \ */
vector<int> v;
int j;
if (d) {
j = h - 1;
if(i >= w) {
j -= i - w + 1;
i = w - 1;
}
} else {
j = 0;
if(i >= w) {
j += i - w + 1;
i = w - 1;
}
}
while (i >= 0 && j >= 0 && j < h) {
if (d) --j;
else ++j;
--i;
v.push_back (pti(i, j));
}
return v;
}
int amatmata (int k) {
vector<int> v;
d = add_or({c0});
for(int i = 0; i < w + h - 1; ++i) {
d = add_or ({d, md (i - k, 0)});
v.push_back (add_and ({d, md (i, 0)}));
}
d = add_or({c0});
for(int i = 0; i < w + h - 1; ++i) {
d = add_or({d, md (i - k, 1)});
v.push_back(add_and ({d, md (i, 1)}));
}
return add_or(v);
}
void contruct_network (int H, int W, int K) {
if (H * W == 2) {
add_or ({0});
return;
}
c0 = add_and ({0, 1, 2});
c1 = add_not (c0);
h = H;
w = W;
add_and({amatmata (K), add_not (amatmata (K + 1))});
}