#include <bits/stdc++.h>
#include "speedrun.h"
using namespace std;
#define pb push_back
const int N = 1024;
vector<int> par(N,1023),nxt(N,1023);
vector<int> adj[N];
vector<int> liste;
void dfs(int node,int p){
if (p != -1) par[node] = p;
liste.pb(node);
for (auto x : adj[node]){
if (x == p) continue;
dfs(x,node);
}
}
void assignHints(int subtask, int n, int a[], int b[]) {
for (int i = 1; i < n; i++){
adj[a[i]-1].pb(b[i]-1);
adj[b[i]-1].pb(a[i]-1);
}
dfs(0,-1);
for (int i = 0; i < n; i++){
nxt[liste[i]] = liste[(i+1) % n];
}
setHintLen(20);
for (int node = 0; node < n; node++){
for (int bit = 0; bit < 10; bit++){
if (nxt[node] & (1 << bit)){
setHint(node+1,bit + 1,1);
}
}
for (int bit = 0; bit < 10; bit++){
if (par[node] & (1 << bit)){
setHint(node+1,bit + 11,1);
}
}
}
}
void speedrun(int subtask, int n, int start) {
int l = getLength();
vector<int> ans(n + 10,0);
int cnt = 0;
int curr = start-1;
int nxt = -1,par = 0;
while (cnt < n) {
if (ans[curr] == 0) cnt++;
ans[curr] = 1;
par = 0;
if (nxt == -1){
nxt = 0;
for (int bit = 0; bit < 10; bit++){
if (getHint(bit+1)) nxt += (1 << bit);
}
}
for (int bit = 0; bit < 10; bit++){
if (getHint(bit+11)) par += (1 << bit);
}
//cout << curr+1 << " " << nxt+1 << " " << par+1 << " " << cnt << endl;
if (goTo(nxt+1)){
curr = nxt;
nxt = -1;
}
else {
goTo(par+1);
curr = par;
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |