Submission #572476

#TimeUsernameProblemLanguageResultExecution timeMemory
572476model_codeGame (APIO22_game)C++17
100 / 100
1328 ms69612 KiB
#include "game.h" #include <bits/stdc++.h> using namespace std; #define FOR(i,a,b) for(int i=int(a);i<int(b);i++) #define REP(i,b) FOR(i,0,b) using vi=vector<int>; #define PB push_back const int Nmax=300010; vi g[Nmax][2]; int n,k; int reach[Nmax][2]; void init(int N, int K){ n=N+2; k=K+2; REP(i,k)REP(t,2) reach[i][t]=i; FOR(i,k,n){ reach[i][0]=0; reach[i][1]=k-1; } } bool dfs(int u,int v,int t){ if(v<k)return false; int pre=reach[v][t]; reach[v][t]=(t==0?(const int&(*)(const int&,const int&))max<int>:(const int&(*)(const int&,const int&))min<int>)(reach[v][t],reach[u][t]); if(reach[v][1]<=reach[v][0])return true; int x=pre^reach[v][t^1]; int y=reach[v][t]^reach[v][t^1]; if(__builtin_clz(x)<__builtin_clz(y)) REP(s,2) for(auto to:g[v][s]) if(dfs(v,to,s)) return true; return false; } int add_teleporter(int u, int v){ if(u<k-2)u++; else u+=2; if(v<k-2)v++; else v+=2; if(max(u,v)<k){ if(u<v)return 0; else return 1; } g[u][0].PB(v); g[v][1].PB(u); if(dfs(u,v,0))return 1; if(dfs(v,u,1))return 1; 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...