#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++;
}
}
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
34 ms |
728 KB |
Output is correct |
2 |
Correct |
34 ms |
796 KB |
Output is correct |
3 |
Correct |
37 ms |
704 KB |
Output is correct |
4 |
Correct |
51 ms |
980 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
45 ms |
728 KB |
Output is correct |
2 |
Correct |
34 ms |
728 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
336 KB |
setHintLen was never called |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
208 KB |
setHintLen was never called |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
336 KB |
setHintLen was never called |
2 |
Halted |
0 ms |
0 KB |
- |