Submission #1211575

#TimeUsernameProblemLanguageResultExecution timeMemory
1211575MuhammadSaramSpeedrun (RMI21_speedrun)C++20
0 / 100
56 ms552 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();
	int nx=calc();
	set<int> se={0,u};
	int cur=u,cnt=0;
	while (nx && cnt<=20)
	{
		if (go(nx))
		{
			cur=u=nx,nx=calc();
			se.insert(u);
		}
		else
		{
			cur=par();
			go(par());
		}
		cnt++;
	}
	nx=calc();
	while (se.size()<=n)
	{
		if (se.count(nx))
			go(par()),nx=calc();
		else
		{
			if (go(nx))
				se.insert(nx),nx=calc();
			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...