이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "vision.h"
#include<bits/stdc++.h>
using namespace std;
int h, w, k;
int calc(int i, int j) {
return i*w+j;
}
bool isvalid(int i, int j) {
if (i < 0 || j < 0 || i >= h || j >= w) {
return 0;
} else {
return 1;
}
}
void construct_network(int H, int W, int K) {
h = H, w = W, k = K;
int n = h+w-1;
vector<vector<int>> diag1(n), diag2(n);
for (int j = 0; j < n; j++) {
int i = j-(h-1);
for (int x = 0; x < h; x++) {
if (isvalid(x, i+x)) {
diag1[j].push_back(calc(x, i+x));
}
}
}
for (int i = 0; i < n; i++) {
for (int x = 0; x < h; x++) {
if (isvalid(x, i-x)) {
diag2[i].push_back(calc(x, i-x));
}
}
}
vector<int> diag1or(n), diag1xor(n), diag1orxor(n), diag2or(n), diag2xor(n), diag2orxor(n);
for (int i = 0; i < n; i++) {
diag1or[i] = add_or(diag1[i]);
diag1xor[i] = add_xor(diag1[i]);
diag1orxor[i] = add_xor({diag1or[i], diag1xor[i]});
diag2or[i] = add_or(diag2[i]);
diag2xor[i] = add_xor(diag2[i]);
diag2orxor[i] = add_xor({diag2or[i], diag2xor[i]});
}
vector<int> ans1k1, ans2k1, ans1k, ans2k;
for (int i = 0; i < n; i++) {
if (i+k >= n) {
break;
}
vector<int> one, two;
for (int j = i; j <= i+k; j++) {
one.push_back(diag1orxor[j]);
}
for (int j = i; j <= i+k; j++) {
two.push_back(diag1or[j]);
}
int a = add_or(two), b = add_xor(two);
one.push_back(add_xor({a, b}));
ans1k1.push_back(add_or(one));
}
for (int i = 0; i < n; i++) {
if (i+k >= n) {
break;
}
vector<int> one, two;
for (int j = i; j <= i+k; j++) {
one.push_back(diag2orxor[j]);
}
for (int j = i; j <= i+k; j++) {
two.push_back(diag2or[j]);
}
int a = add_or(two), b = add_xor(two);
one.push_back(add_xor({a, b}));
ans2k1.push_back(add_or(one));
}
for (int i = 0; i < n; i++) {
if (i+k-1 >= n) {
break;
}
vector<int> one, two;
for (int j = i; j <= i+k-1; j++) {
one.push_back(diag1orxor[j]);
}
for (int j = i; j <= i+k-1; j++) {
two.push_back(diag1or[j]);
}
int a = add_or(two), b = add_xor(two);
one.push_back(add_xor({a, b}));
ans1k.push_back(add_or(one));
}
for (int i = 0; i < n; i++) {
if (i+k-1 >= n) {
break;
}
vector<int> one, two;
for (int j = i; j <= i+k-1; j++) {
one.push_back(diag2orxor[j]);
}
for (int j = i; j <= i+k-1; j++) {
two.push_back(diag2or[j]);
}
int a = add_or(two), b = add_xor(two);
one.push_back(add_xor({a, b}));
ans2k.push_back(add_or(one));
}
add_and({add_and({add_or(ans1k1), add_or(ans2k1)}), add_not({add_and({add_or(ans1k), add_or(ans2k)})})});
}
# | 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... |