#include <bits/stdc++.h>
#include "speedrun.h"
using namespace std;
const int MAXN=1e3+5;
vector<int> sos[MAXN][MAXN];
int cnt[MAXN];
vector<vector<int> > g(MAXN);
void assignHints(int subtask, int N, int A[], int B[]) {
if(subtask==1) {
setHintLen(N);
for(int i=1; i<N; i++) {
g[A[i]].push_back(B[i]);
g[B[i]].push_back(A[i]);
}
for(int i=1; i<=N; i++) {
for(auto to : g[i])setHint(i, to, 1);
}
}
if(subtask==2) {
setHintLen(10);
int x=0;
for(int i=1; i<N; i++) {
g[A[i]].push_back(B[i]);
g[B[i]].push_back(A[i]);
if(g[A[i]].size()>1)x=i;
}
if(x==0)x=1;
for(int j=1; j<=10; j++)setHint(x, j, 1);
for(int i=1; i<=N; i++) {
if(g[i].size()==1) {
for(int j=1; j<=10; j++) {
setHint(i, j, (x & (1<<(j-1)) ? 1 : 0));
}
}
}
}
if(subtask==3) {
setHintLen(20);
for(int i=1; i<N; i++) {
g[A[i]].push_back(B[i]);
g[B[i]].push_back(A[i]);
}
for(int i=1; i<=N; i++) {
int cnt=0;
for(auto to : g[i]) {
if(cnt==0) {
for(int j=1; j<=10; j++) {
setHint(i, j, (to&(1<<(j-1)) ? 1 : 0));
}
cnt++;
}else {
for(int j=11; j<=20; j++) {
setHint(i, j, (to&(1<<(j-11)) ? 1 : 0));
}
}
}
}
}
return;
}
int us[MAXN];
void dfs(int v, int p, int N, int subtask) {
us[v]=1;
if(subtask==1) {
vector<int> gg;
for(int j=1; j<=N; j++) {
if(getHint(j))gg.push_back(j);
}
for(auto to : gg) {
if(!us[to]) {
goTo(to);
dfs(to, v, N, subtask);
}
}
if(v!=p)goTo(p);
else return;
}
if(subtask==3) {
vector<int> gg;
int x=0, y=0;
for(int j=1; j<=10; j++) {
if(getHint(j))x+=(1<<(j-1));
}
for(int j=11; j<=20; j++) {
if(getHint(j))y+=(1<<(j-11));
}
if(x>0)gg.push_back(x);
if(y>0)gg.push_back(y);
for(auto to : gg) {
if(!us[to]) {
goTo(to);
dfs(to, v, N, subtask);
}
}
if(v!=p)goTo(p);
else return;
}
}
void speedrun(int subtask, int N, int start) {
if(subtask==1) {
int len=getLength();
dfs(start, start, N, subtask);
}
if(subtask==2) {
int len=getLength();
bool ok=1;
for(int j=1; j<=10; j++) {
if(!getHint(j)) {
ok=0;
break;
}
}
if(ok) {
for(int i=1; i<=N; i++) {
if(start!=i) {
goTo(i);
goTo(start);
}
}
}else {
int x=0;
for(int j=1; j<=10; j++) {
if(getHint(j))x+=(1<<(j-1));
}
goTo(x);
for(int i=1; i<=N; i++) {
goTo(i);
goTo(x);
}
}
}
if(subtask==3) {
int len=getLength();
dfs(start, start, N, subtask);
}
return;
}
Compilation message
speedrun.cpp: In function 'void speedrun(int, int, int)':
speedrun.cpp:101:13: warning: unused variable 'len' [-Wunused-variable]
101 | int len=getLength();
| ^~~
speedrun.cpp:105:13: warning: unused variable 'len' [-Wunused-variable]
105 | int len=getLength();
| ^~~
speedrun.cpp:133:13: warning: unused variable 'len' [-Wunused-variable]
133 | int len=getLength();
| ^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
55 ms |
48364 KB |
Output is correct |
2 |
Correct |
49 ms |
48352 KB |
Output is correct |
3 |
Correct |
53 ms |
48248 KB |
Output is correct |
4 |
Correct |
57 ms |
48188 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
68 ms |
48112 KB |
Invalid node index to goTo |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
190 ms |
48288 KB |
Output is correct |
2 |
Correct |
124 ms |
48188 KB |
Output is correct |
3 |
Correct |
195 ms |
48288 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
9 ms |
24016 KB |
setHintLen was never called |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
10 ms |
24016 KB |
setHintLen was never called |
2 |
Halted |
0 ms |
0 KB |
- |