제출 #1169050

#제출 시각아이디문제언어결과실행 시간메모리
1169050lighton게임 (APIO22_game)C++20
2 / 100
7 ms14456 KiB
#include "game.h" #include <bits/stdc++.h> #define forf(i,a,b) for(int i = a; i<=b; i++) #define forb(i,b,a) for(int i = b; i>=a; i--) using namespace std; int N,K; int S[300001][21]; vector<int> adj[300001],radj[300001]; void dnc(int dep, int s, int e){ if(s>e) return; int m = s+e>>1; S[m][dep] = 3; forf(i,s,m-1) S[i][dep] = 1; forf(i,m+1,e) S[i][dep] = 2; dnc(dep+1,s,m-1), dnc(dep+1,m+1,e); } void forward(int now){ for(auto i : adj[now]){ int p = 0; while(p<20 && S[now][p] == S[i][p]) p++; if((S[now][p]&2) && S[i][p] == 0) S[i][p] = 2, forward(i); } } void backward(int now){ for(auto i : radj[now]){ int p = 0; while(p<20 && S[now][p] == S[i][p]) p++; if((S[now][p]&1) && S[i][p] == 0) S[i][p] = 1, backward(i); } } void init(int n, int k){ N =n, K=k; dnc(0,0,k-1); forf(i,0,k-2) adj[i].push_back(i+1), radj[i+1].push_back(i); } int add_teleporter(int u, int v) { int p =0; while(p<20 && (S[u][p] == S[v][p] && S[u][p] != 3)) p++; if((S[u][p]&2) && (S[v][p]&1)) return 1; adj[u].push_back(v); radj[v].push_back(u); forf(i,0,20) forward(u), backward(v); return 0; }
#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...