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 <vector>
#include <cassert>
using namespace std;
void construct_network(int h, int w, int k) {
int fid = add_xor({0,0});
vector<int> rows(h);
vector<int> cols(w);
for (int i = 0; i < h; ++i) {
vector<int> q;
for (int j = 0; j < w; ++j) {
q.push_back(i*w + j);
}
rows[i] = add_or(q);
}
for (int j = 0; j < w; ++j) {
vector<int> q;
for (int i = 0; i < h; ++i) {
q.push_back(i*w + j);
}
cols[j] = add_or(q);
}
auto add_fixed = [&](vector<int> v, int d) -> int {
if (d >= (int)v.size()) return fid;
vector<int> tor;
for (int i = 0; i + d < (int)v.size(); ++i) {
tor.push_back(add_and({v[i], v[i+d]}));
}
return add_or(tor);
};
vector<int> dh(h+1);
vector<int> dw(w+1);
for (int i = 1; i <= h; ++i) dh[i] = add_fixed(rows, i);
for (int i = 1; i <= w; ++i) dw[i] = add_fixed(cols, i);
vector<int> nh(h);
vector<int> nw(w);
for (int i = 1; i <= h; ++i) nh[i-1] = add_not(dh[i]);
for (int i = 1; i <= w; ++i) nw[i-1] = add_not(dw[i]);
dh[0] = add_and(nh);
dw[0] = add_and(nw);
vector<int> tor;
for (int i = 0; i <= k; ++i) {
tor.push_back(add_and({dh[i], dw[k - i]}));
}
add_or(tor);
}
# | 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... |