Submission #536863

#TimeUsernameProblemLanguageResultExecution timeMemory
536863jamezzzSpeedrun (RMI21_speedrun)C++17
29 / 100
51 ms980 KiB
#include "speedrun.h" #include <bits/stdc++.h> using namespace std; #define pf printf void assignHints(int subtask, int N, int A[], int B[]) { /* your solution here */ if(subtask==1){ setHintLen(N); for(int i=1;i<N;++i){ setHint(A[i],B[i],1); setHint(B[i],A[i],1); } } if(subtask==2){ setHintLen(20); vector<int> cnt(N+1,0); for(int i=1;i<N;++i)++cnt[A[i]],++cnt[B[i]]; int mx=1; for(int i=1;i<=N;++i)if(cnt[i]>cnt[mx])mx=i; for(int j=1;j<=20;++j){ for(int i=1;i<=N;++i){ if(mx&(1<<(j-1))){ setHint(i,j,1); } } } } } void speedrun(int subtask, int N, int start) { /* your solution here */ if(subtask==1){ vector<int> cur(N+1,1),p(N+1,-1); int pos=start; while(true){ while(cur[pos]!=N+1&&(getHint(cur[pos])==0||cur[pos]==p[pos]))++cur[pos]; if(cur[pos]==N+1){ if(p[pos]==-1)break; else goTo(p[pos]),pos=p[pos]; } else{ goTo(cur[pos]); p[cur[pos]]=pos; pos=cur[pos]++; } } } if(subtask==2){ int cur=1,mid=0,pos=start; for(int i=1;i<=20;++i){ if(getHint(i))mid+=1<<(i-1); } while(true){ if(pos!=mid)goTo(mid),pos=mid; else{ if(cur==N+1)break; if(cur==mid)++cur; goTo(cur); pos=cur++; } } } }
#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...