이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "vision.h"
using namespace std;
void construct_network(int H, int W, int K){
if (K == 1){
int mx = H + W - 1;
vector<vector<int>> id1(mx), id2(mx);
for (int i = 0; i < H; i++){
for (int j = 0; j < W; j++){
id1[i + j].push_back(i * W + j);
id2[i - j + (W - 1)].push_back(i * W + j);
}
}
vector<int> a(mx), b(mx);
for (int i = 0; i < mx; i++){
a[i] = add_or(id1[i]);
b[i] = add_or(id2[i]);
}
vector<int> a2(mx - 1), b2(mx - 1);
for (int i = 0; i < mx - 1; i++){
a2[i] = add_and({a[i], a[i + 1]});
b2[i] = add_and({b[i], b[i + 1]});
}
int X = add_or(a2);
int Y = add_or(b2);
add_and({X, Y});
} else {
vector<int> A;
if (max(H, W) <= 30 || min(H, W) == 1){
for (int x1 = 0; x1 < H; x1++){
for (int y1 = 0; y1 < W; y1++){
for (int x2 = 0; x2 < H; x2++){
for (int y2 = 0; y2 < W; y2++){
if (abs(x2 - x1) + abs(y2 - y1) == K){
int a = x1 * W + y1;
int b = x2 * W + y2;
if (a < b){
A.push_back(add_and({a, b}));
}
}
}
}
}
}
} else {
for (int x = 0; x < H; x++){
for (int y = 0; y < W; y++){
if (x + y == K){
int a = x * W + y;
A.push_back(add_and({0, a}));
}
}
}
}
add_or(A);
}
}
# | 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... |