#include "speedrun.h"
#include <iostream>
#include <vector>
#include <string>
#include <math.h>
#include <cmath>
#include <iomanip>
#include <cstdio>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <deque>
#include <bitset>
#include <cstring>
using namespace std;
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);
}
}
else if(subtask == 2){
int center = 0;
map<int, int> mp;
for(int i = 1; i < n; i++)
mp[a[i]]++, mp[b[i]]++;
int mx = 0;
for(auto i: mp)
if(i.second > mx){
mx = i.second;
center = i.first;
}
setHintLen(20);
for(int i = 1; i <= n; i++){
if(i == center)
continue;
for(int j = 0; j < 20; j++){
if((center >> j) % 2 != 0){
setHint(i, j + 1, 1);
}
}
}
}
}
bool used[1007];
void dfs(int v, int par, int &n){
used[v] = true;
for(int i = 1; i <= n; i++){
if(!used[i] && getHint(i)){
goTo(i);
dfs(i, v, n);
}
}
if(par != -1)
goTo(par);
}
void speedrun(int subtask, int n, int start) { /* your solution here */
if(subtask == 1){
dfs(start, -1, n);
}
else if(subtask == 2){
bool ok = false;
for(int i = 1; i <= 20; i++)
if(getHint(i))
ok = true;
int center = 0;
if(ok){
for(int j = 19; j >= 0; j--){
center *= 2;
if(getHint(j + 1)){
center++;
}
}
goTo(center);
}
else
center = start;
for(int i = 1; i <= n; i++){
if(i != start && i != center){
goTo(i);
goTo(center);
}
}
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
36 ms |
748 KB |
Output is correct |
2 |
Correct |
39 ms |
856 KB |
Output is correct |
3 |
Correct |
45 ms |
832 KB |
Output is correct |
4 |
Correct |
36 ms |
752 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
38 ms |
672 KB |
Output is correct |
2 |
Correct |
38 ms |
692 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 |
336 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 |
- |