제출 #1296167

#제출 시각아이디문제언어결과실행 시간메모리
1296167jahongirSpeedrun (RMI21_speedrun)C++20
100 / 100
60 ms492 KiB
#include "speedrun.h" #include <bits/stdc++.h> using namespace std; const int mxn = 1001, lg2 = 10; vector<int> g[mxn]; int euler[mxn], tim = 0; void dfs(int u, int p){ for(int i = 0; i < lg2; i++) setHint(u,i+lg2+1,(p>>i)&1); euler[++tim] = u; for(auto v : g[u]) if(v!=p) dfs(v,u); } void assignHints(int subtask, int N, int A[], int B[]) { setHintLen(2*lg2); for(int i = 1; i < N; i++){ g[A[i]].push_back(B[i]); g[B[i]].push_back(A[i]); } dfs(1,0); for(int i = 1; i < N; i++){ for(int j = 0; j < lg2; j++) setHint(euler[i],j+1,(euler[i+1]>>j)&1); } } void speedrun(int subtask, int N, int start) { for(; ;){ int p = 0; for(int i = 0; i < lg2; i++) p += ((int)getHint(i+lg2+1))<<i; if(p==0) break; goTo(p); } vector<int> vec = {1}; for(; ; ){ int u = 0; for(int i = 0; i < lg2; i++) u += getHint(i+1)<<i; if(u==0) break; while(!goTo(u)){ auto v = vec.back(); vec.pop_back(); goTo(vec.back()); } vec.push_back(u); } }
#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...