Submission #1360149

#TimeUsernameProblemLanguageResultExecution timeMemory
1360149MunkhErdeneHexagonal Territory (APIO21_hexagon)C++17
11 / 100
2130 ms1114112 KiB
#include "hexagon.h"
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

ll mod = 1e9 + 7;

int draw_territory(int N, int A, int B, vector<int> D, vector<int> L) {
    int n = 2400;
    vector<vector<int>> G(n * n);

    int pos = 1200 * n + 1200;
    unordered_set<int> s;

    vector<int> C = {0, n, n + 1, 1, -n, -n - 1, -1};

    for (int i = 0; i < N; i++) {
        for (int j = 0; j < L[i]; j++) {
            pos += C[D[i]];
            s.insert(pos);
        }
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (i != 0) G[i * n + j].push_back((i - 1) * n + j);
            if (i < n - 1) G[i * n + j].push_back((i + 1) * n + j);
            if (j != 0) G[i * n + j].push_back(i * n + j - 1);
            if (j < n - 1) G[i * n + j].push_back(i * n + j + 1);
            if (i != 0 && j != 0) G[i * n + j].push_back((i - 1) * n + (j - 1));
            if (i < n - 1 && j < n - 1) G[i * n + j].push_back((i + 1) * n + (j + 1));
        }
    }

    vector<int> dist(n * n, 1e9);
    vector<bool> seen(n * n, false);

    seen[0] = true;
    dist[pos] = 0;

    queue<int> q;
    q.push(0);

    while (!q.empty()) {
        int po = q.front();
        q.pop();

        for (int x : G[po]) {
            if (seen[x] || s.count(x)) continue;
            q.push(x);
            seen[x] = true;
        }
    }

    q.push(pos);

    while (!q.empty()) {
        int po = q.front();
        q.pop();

        for (int x : G[po]) {
            if (dist[x] != 1e9 || seen[x]) continue;
            q.push(x);
            dist[x] = dist[po] + 1;
        }
    }

    ll ans = 0;

    for (int i = 0; i < n * n; i++) {
        if (seen[i]) continue;
        ans += A + (ll)B * dist[i];
        ans %= mod;
    }

    return (int)((ans + mod) % mod);
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...