Submission #1335298

#TimeUsernameProblemLanguageResultExecution timeMemory
1335298kenkunkinSpeedrun (RMI21_speedrun)C++20
100 / 100
35 ms496 KiB
#include <bits/stdc++.h>
#include "speedrun.h"

using namespace std;
const int maxn=1e3+5;
int len=20,p[maxn];
vector <int> g[maxn];

void encode(int u,int v,int vt)
{
    for (int i=0;i<10;i++)
        if ((v>>i)&1)
            setHint(u,vt+i,1);
}


vector <int> order={1};
bool check[maxn];
int par[maxn],nxt[maxn];
void DFS(int u)
{
    for (int i=0;i<g[u].size();i++)
    {
        int v=g[u][i];
        if (!check[v])
        {
            check[v]=1;
            par[v]=u;
            order.push_back(v);
            DFS(v);
        }
    }
}
void assignHints (int subtask,int n,int a[],int b[])
{
    setHintLen(len);
    for (int i=1;i<n;i++)
    {
        int u=a[i],v=b[i];
        g[u].push_back(v);
        g[v].push_back(u);
    }
    check[1]=1;
    DFS(1);
    for (int i=0;i<order.size()-1;i++)
        nxt[order[i]]=order[i+1];

    for (int i=1;i<=n;i++)
    {
        encode(i,par[i],1);
        encode(i,nxt[i],11);
    }
    return;
}

int decode(int l)
{
    int ans=0;
    for (int i=0;i<10;i++)
    {
        int b=l+i;
        if (getHint(b))
            ans+=1<<i;
    }
    return ans;
}

void speedrun(int subtask,int n,int u)
{
    int p,nxt;
    while (u!=1)
    {
        p=decode(1),nxt=decode(11);
        goTo(p);
        u=p;
    }
    p=decode(1),nxt=decode(11);
    int Next=nxt;
    while (Next!=0)
    {
        p=decode(1);
        if (!goTo(Next))
            goTo(p);
        else
        {
            u=Next;
            Next=decode(11);
        }
    }

    return;

}
#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...