This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
int h, w, k;
pair<int, int> get_by_index(int i) {
return make_pair(i / w, i % w);
}
int dist(int x1, int y1, int x2, int y2) {
return abs(x1 - x2) + abs(y1 - y2);
}
void construct_network(int H, int W, int K) {
h = H; w = W; k = K;
vector<int> cells;
if (min(h, w) != 1 && max(h, w) > 100) {
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (dist(0, 0, i, j) == k) {
cells.push_back(add_and({0, i * w + j}));
}
}
}
} else {
vector<pair<int, int>> order;
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
order.push_back({i, j});
}
}
mt19937 gen(time(nullptr));
shuffle(order.begin(), order.end(), gen);
int cnt = 0;
for (auto &p : order) {
if (cnt >= 9995) break;
int i1 = p.first;
int j1 = p.second;
vector<int> diag;
for (int i2 = 0; i2 < h; i2++) {
for (int j2 = 0; j2 < w; j2++) {
if (dist(i1, j1, i2, j2) == k) {
diag.push_back(i2 * w + j2);
}
}
}
if (!diag.empty()) {
cells.push_back(add_and({add_not(add_not(i1 * w + j1)), add_or(diag)}));
cnt += 4;
}
}
}
add_or(cells);
}
/*
g++ -std=gnu++14 -O2 -Wall -pipe -static -o "vision" "grader.cpp" "vision.cpp"
*/
# | 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... |