Submission #992779

#TimeUsernameProblemLanguageResultExecution timeMemory
99277912345678Speedrun (RMI21_speedrun)C++17
100 / 100
153 ms1696 KiB
#include "speedrun.h"
#include <bits/stdc++.h>

using namespace std;

const int nx=1e3+5;

int t, in[nx], cur, cnt;
vector<int> d[nx];

int readparent()
{
    int res=0;
    for (int i=1; i<=10; i++) if (getHint(i)) res+=(1<<(i-1));
    return res;
}

int readdestination()
{
    int res=0;
    for (int i=1; i<=10; i++) if (getHint(i+10)) res+=(1<<(i-1));
    return res;
}

void dfs(int u, int p)
{
    in[++t]=u;
    //cout<<"dfs "<<u<<' '<<p<<'\n';
    for (int i=1; i<=10; i++) setHint(u, i, (p&(1<<(i-1)))>0);
    for (auto v:d[u]) if (v!=p) dfs(v, u);    
}

void assignHints(int subtask, int N, int A[], int B[]) {
    setHintLen(20);
    for (int i=1; i<N; i++) d[A[i]].push_back(B[i]), d[B[i]].push_back(A[i]);
    dfs(1, 1);
    for (int i=1; i<N; i++) for (int j=1; j<=10; j++) setHint(in[i], j+10, (in[i+1]&(1<<(j-1)))>0);
    for (int j=1; j<=10; j++) setHint(in[N], j+10, 0);
}

void speedrun(int subtask, int N, int start) {
    int u=start;
    while (readparent()!=u) u=readparent(), goTo(readparent());
    cur=readdestination();
    while (cur!=0)
    {
        if (!goTo(cur)) goTo(readparent());
        else cur=readdestination();
    }
}
#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...