Submission #1296167

#TimeUsernameProblemLanguageResultExecution timeMemory
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...