제출 #1116923

#제출 시각아이디문제언어결과실행 시간메모리
1116923StefanSebezSpeedrun (RMI21_speedrun)C++14
63 / 100
598 ms1172 KiB
#include<bits/stdc++.h>
#include "speedrun.h"
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
#define ld long double
const int N=1050;
vector<int>E[N],cvorovi;
int par[N];
void DFS(int u,int parent){
	cvorovi.pb(u);
	par[u]=parent;
	for(auto i:E[u]){
		if(i==parent) continue;
		DFS(i,u);
	}
}
void assignHints(int subtask, int n, int A[], int B[]) {
	for(int i=1;i<n;i++){E[A[i]].pb(B[i]),E[B[i]].pb(A[i]);}
	DFS(1,0);
	setHintLen(30);
	for(int i=1;i<=n;i++){
		for(int j=1,u=par[i];j<=10;j++,u>>=1){
			setHint(i,j,u&1);
		}
	}
	for(int I=0;I<n-1;I++){
		int i=cvorovi[I];
		int u=cvorovi[I+1],v=par[u];
		for(int j=11;j<=20;j++,v>>=1){
			setHint(i,j,v&1);
		}
		for(int j=21;j<=30;j++,u>>=1){
			setHint(i,j,u&1);
		}
	}
}

void speedrun(int subtask, int n, int start) {
	int U=start;
	while(U!=1){
		int v=0;for(int j=1;j<=10;j++) v+=getHint(j)*(1<<(j-1));
		goTo(v);
		U=v;
	}
	int par[n+10]={0},ct=n-1;
	while(ct--){
		int u=0;for(int j=11;j<=20;j++) u+=getHint(j)*(1<<(j-11));
		int v=0;for(int j=21;j<=30;j++) v+=getHint(j)*(1<<(j-21));
		while(U!=u){
			goTo(par[U]);
			U=par[U];
		}
		goTo(v);
		U=v;par[v]=u;
	}
}
#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...