이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "vision.h"
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
using namespace std;
using i64 = long long;
using d64 = long double;
using pi = pair<int, int>;
using pli = pair<i64, i64>;
using ti = tuple<int, int, int>;
using tli = tuple<i64, i64, i64>;
#define iterall(cont) cont.begin(), cont.end()
#define prec(n) setprecision(n) << fixed
void construct_network(int H, int W, int K) {
auto valid = [H, W](int x, int y) {
return 0 <= x && x < H && 0 <= y && y < W;
};
auto getNum = [W](int x, int y) { return x * W + y; };
int c = H * W;
vector<int> idx1;
for (int s = 0; s < H + W - 1; s++) {
vector<int> tmp;
for (int x = 0; x < H; x++) {
int y = s - x;
if (valid(x, y)) tmp.emplace_back(getNum(x, y));
}
add_or(tmp);
idx1.emplace_back(c++);
}
vector<int> idx2;
for (int s = W - 1; s >= -(H - 1); --s) {
vector<int> tmp;
for (int x = 0; x < H; x++) {
int y = x + s;
if (valid(x, y)) tmp.emplace_back(getNum(x, y));
}
add_or(tmp);
idx2.emplace_back(c++);
}
if (K == 1) {
vector<int> idx4;
for (int i = 0; i < idx1.size() - K; i++) {
add_and({idx1[i], idx1[i + K]});
idx4.emplace_back(c++);
}
vector<int> idx5;
for (int i = 0; i < idx2.size() - K; i++) {
add_and({idx2[i], idx2[i + K]});
idx5.emplace_back(c++);
}
add_or(idx4);
add_or(idx5);
add_and({c, c + 1});
return;
}
// K - 1 연속 (False여야 함)
vector<int> idx3_1;
for (int i = 0; i <= idx1.size() - K + 1; i++) {
vector<int> tmp;
copy(idx1.begin() + i, idx1.begin() + i + K - 1, back_inserter(tmp));
add_or(tmp);
add_xor(tmp);
add_xor({c, c + 1});
idx3_1.emplace_back(c + 2);
c += 3;
}
vector<int> idx3_2;
for (int i = 0; i <= idx2.size() - K + 1; i++) {
vector<int> tmp;
copy(idx2.begin() + i, idx2.begin() + i + K - 1, back_inserter(tmp));
add_or(tmp);
add_xor(tmp);
add_xor({c, c + 1});
idx3_2.emplace_back(c + 2);
c += 3;
}
// K 연속 (True여야 함)
vector<int> idx4;
for (int i = 0; i < idx1.size() - K; i++) {
add_and({idx1[i], idx1[i + K]});
idx4.emplace_back(c++);
}
vector<int> idx5;
for (int i = 0; i < idx2.size() - K; i++) {
add_and({idx2[i], idx2[i + K]});
idx5.emplace_back(c++);
}
add_xor(idx1);
add_or(idx3_1);
add_or({c, c + 1});
add_xor(idx2);
add_or(idx3_2);
add_or({c + 3, c + 4});
add_or(idx4);
add_or(idx5);
add_and({c + 2, c + 7});
add_and({c + 5, c + 6});
add_and({c + 6, c + 7});
add_or({c + 8, c + 9, c + 10});
}
컴파일 시 표준 에러 (stderr) 메시지
vision.cpp: In function 'void construct_network(int, int, int)':
vision.cpp:53:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
53 | for (int i = 0; i < idx1.size() - K; i++) {
| ~~^~~~~~~~~~~~~~~~~
vision.cpp:58:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
58 | for (int i = 0; i < idx2.size() - K; i++) {
| ~~^~~~~~~~~~~~~~~~~
vision.cpp:70:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
70 | for (int i = 0; i <= idx1.size() - K + 1; i++) {
| ~~^~~~~~~~~~~~~~~~~~~~~~
vision.cpp:81:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
81 | for (int i = 0; i <= idx2.size() - K + 1; i++) {
| ~~^~~~~~~~~~~~~~~~~~~~~~
vision.cpp:93:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
93 | for (int i = 0; i < idx1.size() - K; i++) {
| ~~^~~~~~~~~~~~~~~~~
vision.cpp:98:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
98 | for (int i = 0; i < idx2.size() - K; i++) {
| ~~^~~~~~~~~~~~~~~~~
# | 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... |