#include <vector>
#include <unordered_set>
std::vector<std::vector<int>> create_map(int N, int M, std::vector<int> A, std::vector<int> B) {
int K = 2 * N;
std::vector<std::vector<int>> grid(K, std::vector<int>(K, 0));
std::vector<std::vector<bool>> used(K, std::vector<bool>(K, false));
std::unordered_set<int> appeared;
int r = 0, c = 0;
auto place_pair = [&](int a, int b) {
while (r < K) {
if (c + 1 < K && !used[r][c] && !used[r][c + 1]) {
grid[r][c] = a;
grid[r][c + 1] = b;
used[r][c] = used[r][c + 1] = true;
appeared.insert(a);
appeared.insert(b);
c += 2;
if (c >= K) {
c = 0;
++r;
}
return;
} else {
++c;
if (c >= K) {
c = 0;
++r;
}
}
}
};
// Đặt mỗi cạnh (A[i], B[i]) vào lưới
for (int i = 0; i < M; ++i) {
place_pair(A[i], B[i]);
}
// Đảm bảo mỗi màu xuất hiện ít nhất 1 lần
for (int color = 1; color <= N; ++color) {
if (appeared.count(color)) continue;
// Tìm 1 ô trống bất kỳ
bool done = false;
for (int i = 0; i < K && !done; ++i) {
for (int j = 0; j < K && !done; ++j) {
if (!used[i][j]) {
grid[i][j] = color;
used[i][j] = true;
done = true;
}
}
}
}
return grid;
}
# | 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... |