Submission #1211577

#TimeUsernameProblemLanguageResultExecution timeMemory
1211577MuhammadSaramSpeedrun (RMI21_speedrun)C++20
100 / 100
57 ms556 KiB
#include "speedrun.h"
#include <bits/stdc++.h>

using namespace std;

#define Set setHint
#define go goTo
#define get getHint

const int M = 1001;

vector<int> nei[M],ord;
int Par[M];

void dfs(int u)
{
	ord.push_back(u);
	for (int i:nei[u])
		if (i!=Par[u])
			Par[i]=u,dfs(i);
}

void assignHints(int subtask, int n, int a[], int b[])
{
	setHintLen(20);
	for (int i=1;i<n;i++)
		nei[a[i]].push_back(b[i]),nei[b[i]].push_back(a[i]);
	dfs(1);
	ord.push_back(0);
	for (int i=1;i<=n;i++)
		for (int p=0;p<10;p++)
		{
			Set(i,p+1,(Par[i]>>p)%2);
			Set(ord[i-1],p+11,(ord[i]>>p)%2);
		}
}

int calc()
{
	int ans=0;
	for (int p=11,pw=1;p<=20;p++,pw*=2)
		ans+=get(p)*pw;
	return ans;
}

int par()
{
	int ans=0;
	for (int p=1,pw=1;p<=10;p++,pw*=2)
		ans+=get(p)*pw;
	return ans;
}

void speedrun(int subtask, int n, int s)
{
	int u=s;
	getLength();
	while (u!=1)
		u=par(),go(u);
	int nx=calc();
	set<int> se={0,u};
	while (nx)
	{
		if (go(nx))
		{
			u=nx,nx=calc();
			se.insert(u);
		}
		else
			go(par());
	}
}
#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...