제출 #1335124

#제출 시각아이디문제언어결과실행 시간메모리
1335124boclobanchatSpeedrun (RMI21_speedrun)C++20
100 / 100
60 ms492 KiB
#include"speedrun.h"
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1024;
vector<int> ds[MAXN];
int root[MAXN],eul[MAXN],pos[MAXN],tdfs=0;
void dfs(int i,int pre)
{
	pos[i]=++tdfs,eul[tdfs]=i,root[i]=pre;
	for(auto v:ds[i]) if(v!=pre) dfs(v,i);
}
void setHintNode(int idx,int rt,int nx)
{
	for(int i=1;i<=10;i++) setHint(idx,i,(rt>>(i-1))%2);
	for(int i=11;i<=20;i++) setHint(idx,i,(nx>>(i-11))%2);
}
void assignHints(int subtask,int N,int A[],int B[])
{
	setHintLen(20);
	for(int i=1;i<=N-1;i++) ds[A[i]].push_back(B[i]),ds[B[i]].push_back(A[i]);
	dfs(1,0);
	for(int i=1;i<=N;i++)
	{
		int rt=root[i],nx=0;
		if(pos[i]<N) nx=eul[pos[i]+1];
		setHintNode(i,rt,nx);
	}
}
int getRoot()
{
	int ans=0;
	for(int i=10;i;i--) ans=ans*2+getHint(i);
	return ans;
}
int getNext()
{
	int ans=0;
	for(int i=20;i>10;i--) ans=ans*2+getHint(i);
	return ans;
}
void speedrun(int subtask,int N,int start)
{
	int res=getLength();
	while(getRoot()) goTo(getRoot());
	for(int i=1;i<N;i++)
	{
		int nx=getNext();
		bool ck=goTo(nx);
		while(!ck)
		{
			goTo(getRoot());
			ck=goTo(nx);
		}
	}
}
#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...