Submission #1253391

#TimeUsernameProblemLanguageResultExecution timeMemory
1253391dreamnguyenWorld Map (IOI25_worldmap)C++20
0 / 100
15 ms2116 KiB
#include <vector>
#include <stack>
#include <algorithm>
#include <map>
#include <set>

std::vector<std::vector<int>> create_map(int N, int M, std::vector<int> A, std::vector<int> B) {
    int K = 2 * M + 1;

    std::map<int, std::multiset<int>> graph;

    for (int i = 0; i < M; ++i) {
        graph[A[i]].insert(B[i]);
        graph[B[i]].insert(A[i]);
    }
    int start = 1;
    for (int i = 1; i <= N; ++i) {
        if (graph[i].size() % 2 == 1) {
            start = i;
            break;
        }
    }

    std::vector<int> euler_path;
    std::stack<int> s;
    s.push(start);

    while (!s.empty()) {
        int u = s.top();
        if (graph[u].empty()) {
            euler_path.push_back(u);
            s.pop();
        } else {
            int v = *graph[u].begin();
            graph[u].erase(graph[u].find(v));
            graph[v].erase(graph[v].find(u));
            s.push(v);
        }
    }
    std::vector<std::vector<int>> map(K, std::vector<int>(K, 0));
    int x = 0, y = 0;
    int dx = 0, dy = 1;

    for (int i = 0; i + 1 < (int)euler_path.size(); ++i) {
        int a = euler_path[i];
        int b = euler_path[i + 1];

        map[x][y] = a;
        map[x + dx][y + dy] = b;

        x += dx;
        y += dy;

        if (y + 1 >= K) {
            x += 2;
            y = 0;
        }
    }

    // Lấp ô chưa dùng bằng quốc gia 1
    for (int i = 0; i < K; ++i)
        for (int j = 0; j < K; ++j)
            if (map[i][j] == 0)
                map[i][j] = 1;

    return map;
}
#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...