제출 #1012985

#제출 시각아이디문제언어결과실행 시간메모리
1012985thangdz2k7게임 (APIO22_game)C++17
100 / 100
1212 ms87848 KiB
#include "game.h"
#include <bits/stdc++.h>

using namespace std;

const int N = 3e5 + 5;

int l[N], r[N], K;
vector <int> in[N], out[N];

void init(int n, int k){
    K = k;
    for (int i = 0; i <= k; ++ i) l[i] = i, r[i] = i + 1;
    for (int i = k + 1; i <= n; ++ i) l[i] = 0, r[i] = k + 1;
    for (int i = 0; i <= n; ++ i) in[i] = {}, out[i] = {};
}

int calc(int u, int v){
    if (r[u] <= l[v]) return 0;
    if (l[u] >= r[v]) return 1;
    if (l[u] == l[v] && r[u] == r[v]) return 0;

    if (r[v] <= (l[u] + r[u]) / 2){
        r[u] = (l[u] + r[u]) / 2;
        for (int i : in[u]) if (calc(u, i)) return 1;
        for (int i : out[u]) if (calc(i, u)) return 1;
    }
    else if (l[u] >= (l[v] + r[v]) / 2){
        l[v] = (l[v] + r[v]) / 2;
        for (int i : in[v]) if (calc(v, i)) return 1;
        for (int i : out[v]) if (calc(i, v)) return 1;
    }

    return 0;
}

int add_teleporter(int u, int v){
    ++ u;
    if (v >= K) ++ v;
    in[u].push_back(v);
    out[v].push_back(u);
    return calc(u, v);
}
#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...