Submission #1245712

#TimeUsernameProblemLanguageResultExecution timeMemory
1245712Ice_manSpeedrun (RMI21_speedrun)C++20
100 / 100
98 ms47604 KiB
#include<bits/stdc++.h>
#include "speedrun.h"

using namespace std;

vector<long long>oiler;
vector<long long>graph[1'000'000];
vector<long long>tree[1'000'000];
bool vis[1'000'000];
long long par[1'000'000];

long long next1[1'000'000];

void dfs(long long x)
{

    vis[x]=true;
    if (oiler.size()!=0)
    {
        next1[oiler.back()]=x;
    }
    oiler.push_back(x);

    for (auto next:graph[x])
    {
        if (!vis[next]) dfs(next);
        par[next]=x;
    }
    return;
}


void assignHints(int subtask, int n, int a[], int b[])
{
    setHintLen(20);
    vector<pair<long long, long long>>v;
    for (long long i=1; i<n; i++)
    {
        v.push_back({a[i], b[i]});
        v.push_back({b[i], a[i]});
        graph[a[i]].push_back(b[i]);
        graph[b[i]].push_back(a[i]);
    }
    for (long long i=1; i<=n; i++) next1[i]=0;

    dfs(1);



    for (long long i=1; i<=n; i++)
    {
        long long x=par[i];
        for (long long j=1; j<=10; j++)
        {
            setHint(i, j, x%2);
            x/=2;
        }


        x=next1[i];
        for (long long j=11; j<=20; j++)
        {
            setHint(i, j, x%2);
            x/=2;
        }
    }
}



void speedrun(int subtask, int n, int start)
{
    long long root=start;

    while (root!=1)
    {
        long long p=0;

        for (long long j=1; j<=10; j++)
        {
            p+=(1<<(j-1))*getHint(j);
        }
        goTo(p);
        root=p;
    }



    while (true)
    {
        long long sled=0;
        for (long long j=11; j<=20; j++)
        {
            sled+=(1<<(j-11))*getHint(j);
        }


        if (sled==0)
        {
            break;
        }
        bool ret=goTo(sled);





        if (ret==0)
        {
            while (true)
            {
                long long pp=0;
                for (long long j=1; j<=10; j++)
                {
                    pp+=(1<<(j-1))*getHint(j);
                }
                goTo(pp);
                if (goTo(sled))
                {
                    break;
                }
            }
        }
    }

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