# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
416017 | bipartite_matching | Vision Program (IOI19_vision) | C++14 | 13 ms | 1356 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>
#define forint(i, N) for (int i = 0; i < (N); i++)
using namespace std;
vector<int> v = {1, 0, 0, 0, 0, 1};
int add_not(int N);
int add_and(vector<int> N);
int add_or(vector<int> N);
int add_xor(vector<int> N);
void construct_network(int h, int w, int k) {
vector<int> right;
int vsize = h * w - 1;
for (int i = h - 1; i >= 1; i--) {
int a = i;
int b = 0;
vector<int> tmp;
while (b < w && a < h) {
tmp.push_back(a * w + b);
a++;
b++;
}
//cerr << "ja" << endl;
vsize++;
right.push_back(vsize);
add_or(tmp);
}
for (int i = 0; i < w; i++) {
int a = 0;
int b = i;
vector<int> tmp;
while (b < w && a < h) {
tmp.push_back(a * w + b);
a++;
b++;
}
vsize++;
right.push_back(vsize);
add_or(tmp);
}
//cerr << vsize << " right diagonal" << endl;
//cerr << "ja" << endl;
vector<int> left;
for (int i = 0; i < h - 1; i++) {
int a = i;
int b = 0;
vector<int> tmp;
while (b < w && a >= 0) {
tmp.push_back(a * w + b);
a--;
b++;
}
vsize++;
left.push_back(vsize);
add_or(tmp);
}
for (int i = 0; i < w; i++) {
int a = h - 1;
int b = i;
vector<int> tmp;
while (b < w && a >= 0) {
tmp.push_back(a * w + b);
a--;
b++;
}
vsize++;
left.push_back(vsize);
add_or(tmp);
}
//cerr << vsize << " left diagonal" << endl;
//cerr << "ja" << endl;
vector<int> right_test;
vector<int> left_test;
forint(i, right.size() - k) {
vsize++;
right_test.push_back(vsize);
add_and({right[i], right[i + k]});
vsize++;
left_test.push_back(vsize);
add_and({left[i], left[i + k]});
}
//cerr << "ja" << endl;
vector<int> right2;
vector<int> left2;
forint(i, right.size() - k) {
vector<int> tmp1;
vector<int> tmp2;
for (int j = i; j <= i + k; j++) {
tmp1.push_back(right[j]);
tmp2.push_back(left[j]);
}
//cerr << "ja " <<endl;
vsize += 2;
add_or(tmp1);
add_xor(tmp1);
add_xor({vsize - 1, vsize});
vsize++;
right2.push_back(vsize);
vsize += 2;
add_or(tmp2);
add_xor(tmp2);
add_xor({vsize - 1, vsize});
vsize++;
left2.push_back(vsize);
}
//cerr << "ja" << endl;
vsize++;
add_or(right2);
//cerr << v[vsize] << endl;
vsize++;
add_or(left2);
vsize++;
add_or(right_test);
vsize++;
add_or(left_test);
//cerr << v[vsize] << endl;
vsize++;
add_and({vsize - 4, vsize - 1});
add_and({vsize - 3, vsize - 2});
vsize++;
add_or({vsize - 1, vsize});
}
Compilation message (stderr)
# | 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... |