Submission #1155013

#TimeUsernameProblemLanguageResultExecution timeMemory
1155013fryingducSpeedrun (RMI21_speedrun)C++20
100 / 100
56 ms512 KiB
#include "speedrun.h" #include "bits/stdc++.h" using namespace std; const int maxn = 1005; int n, tin[maxn], et[maxn]; int timer; int par[maxn]; vector<int> g[maxn]; void dfs(int u, int prev) { tin[u] = ++timer; et[timer] = u; for (auto v:g[u]) { if (v == prev) continue; par[v] = u; dfs(v, u); } } void assignHints(int subtask, int N, int A[], int B[]) { n = N; for (int i = 1; i <= n; ++i) { g[i].clear(); } for (int i = 1; i < n; ++i) { int u = A[i], v = B[i]; g[u].push_back(v); g[v].push_back(u); } timer = par[1] = 0; dfs(1, 0); setHintLen(20); for (int i = 1; i <= n; ++i) { for (int j = 0; j < 10; ++j) { setHint(i, j + 1, (par[i] >> j & 1)); } int t = tin[i]; if (t < n) { t = et[t + 1]; for (int j = 0; j < 10; ++j) { setHint(i, j + 1 + 10, (t >> j & 1)); } } } } int getp() { int p = 0; for (int i = 0; i < 10; ++i) { if (getHint(i + 1)) { p |= (1 << i); } } return p; } int gets() { int p = 0; for (int i = 0; i < 10; ++i) { if (getHint(i + 1 + 10)) { p |= (1 << i); } } return p; } void speedrun(int subtask, int N, int start) { n = N; vector<bool> vis(n + 1); vis[start] = 1; while (true) { int p = getp(); if (!p) break; goTo(p); } while (true) { int nxt = gets(); if (!nxt) { break; } while (!goTo(nxt)) { goTo(getp()); } } }
#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...