이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define forint(i, N) for (int i = 0; i < (N); i++)
using namespace std;
vector<int> v = {0, 0, 1, 1, 0, 0};
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;
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;
vector<int> right_test;
vector<int> left_test;
forint(i, w) {
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]});
}
vector<int> right2;
vector<int> left2;
forint(i, w) {
vector<int> tmp1;
vector<int> tmp2;
for (int j = i; j <= i + k; j++) {
tmp1.push_back(right[j]);
tmp2.push_back(left[j]);
}
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);
}
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});
}
# | 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... |