이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "vision.h"
using namespace std;
vector<int> N1, N2, N1_2, N1_3, N1_4, N1_5, N1_6, N2_2, N2_3, N2_4, N2_5, N2_6, nums, ph, ph2;
void construct_network(int H, int W, int K) {
nums = {0, add_not(0)};
int BLANK = add_and(nums);
for(int i = 0; i < H+W-1; i++) {
vector<int>().swap(nums);
for(int j = max(0, i+1-W); j < min(H, i+1); j++) {
nums.push_back(j*W + i-j);
// cout << i << ' ' << j << '\n';
}
N1.push_back(add_xor(nums));
}
for(int i = 0; i < H+W-1; i++) {
vector<int>().swap(nums);
for(int j = max(0, i+1-W); j < min(H, i+1); j++) {
nums.push_back((H-j-1)*W + i-j);
}
N2.push_back(add_xor(nums));
}
int X = N1.size(); // X = H + W - 1; X > K
for(int i = 0; i < X+K; i++) {
vector<int>().swap(nums);
for(int j = max(0, i-K); j <= min(i, X-1); j++) {
nums.push_back(N1[j]);
}
N1_2.push_back(add_xor(nums));
}
for(int i = 0; i < X+K; i++) {
vector<int>().swap(nums);
for(int j = max(0, i-K); j <= min(i, X-1); j++) {
nums.push_back(N2[j]);
}
N2_2.push_back(add_xor(nums));
}
X = N1_2.size(); // X = H + W + K - 1; X > 2K
for(int i = 0; i < X-2; i++) {
vector<int>().swap(nums);
nums.push_back(N1_2[i]);
nums.push_back(add_not(N1_2[i+1]));
nums.push_back(N1_2[i+2]);
N1_3.push_back(add_and(nums));
}
for(int i = 0; i < X-2; i++) {
vector<int>().swap(nums);
nums.push_back(N2_2[i]);
nums.push_back(add_not(N2_2[i+1]));
nums.push_back(N2_2[i+2]);
N2_3.push_back(add_and(nums));
}
K++;
for(int i = 0; i <= X-2*K; i++) {
vector<int>().swap(nums);
nums.resize(2*K);
for(int j = 0; j < 2*K; j++) nums[j] = N1_2[i+j];
N1_4.push_back(add_and(nums));
}
for(int i = 0; i <= X-2*K; i++) {
vector<int>().swap(nums);
nums.resize(2*K);
for(int j = 0; j < 2*K; j++) nums[j] = N2_2[i+j];
N2_4.push_back(add_and(nums));
}
for(int i = 0; i <= X-K; i++) {
vector<int>().swap(nums);
nums.resize(K);
for(int j = 0; j < K; j++) nums[j] = N1_2[i+j];
N1_5.push_back(add_and(nums));
}
for(int i = 0; i <= X-K; i++) {
vector<int>().swap(nums);
nums.resize(K);
for(int j = 0; j < K; j++) nums[j] = N2_2[i+j];
N2_5.push_back(add_and(nums));
}
int good1 = add_or(N1_3), good2 = add_or(N2_3);
if(N1_4.size()) N1_6.push_back(add_or(N1_4));
else N1_6.push_back(BLANK);
ph.push_back(add_or(N1_2));
ph.push_back(add_or(N1_5));
ph.push_back(add_not(add_xor(N1_5)));
N1_6.push_back(add_and(ph));
vector<int>().swap(ph);
if(N2_4.size()) N2_6.push_back(add_or(N2_4));
else N2_6.push_back(BLANK);
ph.push_back(add_or(N2_2));
ph.push_back(add_or(N2_5));
ph.push_back(add_not(add_xor(N2_5)));
N2_6.push_back(add_and(ph));
vector<int>().swap(ph);
int bad1 = add_or(N1_6), bad2 = add_or(N2_6);
ph = {good1, good2};
ph2 = {bad1, bad2};
vector<int>().swap(nums);
nums.push_back(add_or(ph));
nums.push_back(add_not(add_or(ph2)));
add_and(nums);
}
# | 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... |