Submission #1253340

#TimeUsernameProblemLanguageResultExecution timeMemory
1253340vuvietWorld Map (IOI25_worldmap)C++20
0 / 100
1 ms328 KiB
#include <bits/stdc++.h>
using namespace std;

typedef vector<int> vi;

vector<vi> create_map(int n, int m, vi a, vi b) {
    const int K = 2 * n; // kích thước lưới (an toàn với n <= 15)
    vector<vi> grid(K, vi(K, 0));
    vector<pair<int, int>> pos(n + 1, {-1, -1});

    int r = 0, c = 0;

    // Bước 1: đặt mỗi quốc gia vào 1 ô riêng biệt
    for (int i = 1; i <= n; i++) {
        grid[r][c] = i;
        pos[i] = {r, c};
        c++;
        if (c == K) c = 0, r++;
    }

    // Bước 2: tạo tiếp giáp cho các cặp liên kết
    int dr[] = {-1, 1, 0, 0};
    int dc[] = {0, 0, -1, 1};

    for (int i = 0; i < m; i++) {
        int u = a[i], v = b[i];
        bool found = false;

        // tìm ô đã có màu u
        for (int x = 0; x < K && !found; x++) {
            for (int y = 0; y < K && !found; y++) {
                if (grid[x][y] != u) continue;
                // tìm ô trống xung quanh để đặt v
                for (int d = 0; d < 4; d++) {
                    int nx = x + dr[d], ny = y + dc[d];
                    if (nx >= 0 && nx < K && ny >= 0 && ny < K) {
                        if (grid[nx][ny] == 0) {
                            grid[nx][ny] = v;
                            found = true;
                            break;
                        } else if (grid[nx][ny] == v) {
                            found = true;
                            break;
                        }
                    }
                }
            }
        }

        // nếu chưa đặt được, gán đại v vào ô trống
        if (!found) {
            for (int x = 0; x < K && !found; x++) {
                for (int y = 0; y < K && !found; y++) {
                    if (grid[x][y] == 0) {
                        grid[x][y] = v;
                        found = true;
                    }
                }
            }
        }
    }

    return grid;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...