#include "speedrun.h"
#include <bits/stdc++.h>
using namespace std;
#define f(i,a,b) for(int i = a; i < b; i++)
const int N = 1005;
void setHintLen (int l);
void setHint(int i, int j, bool b);
int getLength ();
bool getHint(int j);
bool goTo(int x);
int n;
int p[N];
vector <int> adj[N], curr, order;
bool vis[N];
void dfs(int u, int f){
curr.push_back(u);
order.push_back(u);
p[u] = f;
for(int v: adj[u]){
if(v == f) continue;
dfs(v, u);
}
if(f != 0) curr.push_back(f);
}
void assign(int node, int pos, int val){
int l = 10*(pos-1) + 1, r = 10*pos;
f(i,l,r+1){
int x = i - l;
if(val&(1<<x)) setHint(node, i, 1);
}
}
void assignHints(int subtask, int Ni, int A[], int B[]) {
setHintLen(30);
n = Ni;
f(i,1,n){
adj[A[i]].push_back(B[i]);
adj[B[i]].push_back(A[i]);
}
dfs(1, 0);
int id = 0;
f(i,0,n){
int node = order[i];
assign(node, 1, p[node]);
assign(node, 2, curr[id++]);
assign(node, 3, curr[id++]);
}
}
int get(int pos){
int ans = 0, l = 10*(pos-1) + 1, r = 10*pos;
f(i,l,r+1){
int x = l-i;
if(getHint(i)) ans ^= (1<<x);
}
return ans;
}
void speedrun(int subtask, int Ni, int start) {
n = Ni;
while(1){
int father = get(1);
if(father == 0) break;
goTo(start);
start = father;
}
// start == root
if(get(2) != 0) curr.push_back(get(2));
if(get(3) != 0) curr.push_back(get(3));
int id = 1;
vis[start] = 1;
while(id < curr.size()){
int node = curr[id];
if(!goTo(node))
return;
if(!vis[node]){
vis[node] = 1;
if(get(2) != 0) curr.push_back(get(2));
if(get(3) != 0) curr.push_back(get(3));
}
id++;
}
}
Compilation message
speedrun.cpp: In function 'void speedrun(int, int, int)':
speedrun.cpp:78:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
78 | while(id < curr.size()){
| ~~~^~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
93 ms |
744 KB |
Invalid node index to goTo |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
336 KB |
The length is too large |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
336 KB |
The length is too large |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
118 ms |
816 KB |
Invalid node index to goTo |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
105 ms |
760 KB |
Invalid node index to goTo |
2 |
Halted |
0 ms |
0 KB |
- |