Submission #1291058

#TimeUsernameProblemLanguageResultExecution timeMemory
1291058warrennSpeedrun (RMI21_speedrun)C++20
100 / 100
36 ms480 KiB
#include "speedrun.h" #include<bits/stdc++.h> using namespace std; #define ll long long vector<int>adj[1002]; vector<int>ord; int p[1002]; void euler(int cur,int par){ ord.push_back(cur); p[cur]=par; for(auto x : adj[cur]){ if(x==par)continue; euler(x,cur); } } void assignHints(int subtask, int n, int A[], int B[]) { /* your solution here */ setHintLen(20); for(int q=1;q<n;q++){ adj[A[q]].push_back(B[q]); adj[B[q]].push_back(A[q]); } euler(1,0); // set hint : par nxt for(int q=0;q<ord.size();q++){ int brp=0; if(q==ord.size()-1){ brp=p[ord[q]]; } else{ brp=p[ord[q]]; brp+=ord[q+1]*(1<<10); } for(int w=19;w>=0;w--){ if((brp>>w)&1){ setHint(ord[q],w+1,1); } } } } int brp(){ int val=0; for(int q=19;q>=0;q--){ if(getHint(q+1)){ val+=(1<<q); } } return val; } void speedrun(int subtask, int N, int start) { /* your solution here */ // cout<<start<<" "<<brp()<<endl; while(start!=1){ int val=brp(); goTo((val & 1023)); start=(val & 1023); } int cur=1; while(true){ int val=brp(); int nxt=(val>>10); if(nxt==0)break; while(!goTo(nxt)){ int par=(val & 1023); goTo(par); val=brp(); } cur=nxt; } }
#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...