QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#528083#2810. Speedrunnhuang6850 0ms0kbC++202.0kb2024-08-23 07:14:162024-08-23 07:14:19

Judging History

你现在查看的是最新测评结果

  • [2024-08-23 07:14:19]
  • 评测
  • 测评结果:0
  • 用时:0ms
  • 内存:0kb
  • [2024-08-23 07:14:16]
  • 提交

speedrun

#include "speedrun.h"
#include <bits/stdc++.h>

constexpr int LG = 10;

void dfs(
  int node,
  std::vector<int> &par,
  std::vector<int> &id,
  std::vector<int> &t,
  const std::vector<std::vector<int>> &adj
) {
  t.push_back(node);
  id[node] = static_cast<int>(t.size()) - 1;
  for (int i : adj[node]) {
    if (i == par[node]) {
      continue;
    }
    par[i] = node;
    dfs(i, par, id, t, adj);
  }
}

void assignHints(int /*subtask*/, int N, int A[], int B[]) {
  if (N <= 20) {
    setHintLen(1);
    return;
  }
  const int n = N;
  std::vector<std::vector<int>> adj(n + 1);
  for (int i = 1; i < n; ++i) {
    adj[A[i]].push_back(B[i]);
    adj[B[i]].push_back(A[i]);
  }
  std::vector<int> par(n + 1, -1), id(n + 1, -1), t;
  dfs(1, par, id, t, adj);

  setHintLen(2 * LG);
  for (int i = 1; i <= n; ++i) {
    if (par[i] != -1) {
      for (int j = 0; j < LG; ++j) {
        setHint(i, j + 1, ((1 << j) & par[i]) != 0);
      }
    }
    if (id[i] != n - 1) {
      int nxt = t[id[i] + 1];
      for (int j = 0; j < LG; ++j) {
        setHint(i, j + LG + 1, ((1 << j) & nxt) != 0);
      }
    }
  }
}

int get_par() {
  int ans = 0;
  for (int j = 0; j < LG; ++j) {
    if (getHint(j + 1)) {
      ans |= 1 << j;
    }
  }
  return ans;
}

int get_nxt() {
  int ans = 0;
  for (int j = 0; j < LG; ++j) {
    if (getHint(j + LG + 1)) {
      ans |= 1 << j;
    }
  }
  return ans;
}

void dfs_small(int node, int par, int n) {
  for (int i = 1; i <= n; ++i) {
    if (i != par && goTo(i)) {
      dfs_small(i, node, n);
    }
  }
  if (par != -1) {
    bool b = goTo(par);
    assert(b);
  }
}

void speedrun(int /*subtask*/, int N, int start) {
  if (N <= 20) {
    dfs_small(start, -1, N);
    return;
  }
  const int n = N;
  int node = start;
  while (node != 1) {
    node = get_par();
    bool b = goTo(node);
    assert(b);
  }

  for (int i = 1; i < n; ++i) {
    int nxt = get_nxt();
    while (!goTo(node)) {
      node = get_par();
    }
  }
}

详细

Subtask #1:

score: 0
Time Limit Exceeded

Test #1:

score: 0
Time Limit Exceeded

input:

1
1 1000
1 119
1 453
1 454
2 59
3 113
3 657
3 824
4 494
5 33
5 550
5 937
6 287
7 222
7 577
7 742
8 626
9 896
10 204
11 638
12 305
12 552
12 791
13 246
14 840
15 95
15 316
15 772
16 109
16 551
16 846
17 581
18 142
19 601
19 744
19 977
20 361
20 404
20 845
21 245
21 410
21 518
22 351
23 971
24 497
24 ...

output:

1 1 20
1 2 1 11 1
1 2 1 12 1
1 2 1 13 1
1 2 1 14 0
1 2 1 15 1
1 2 1 16 1
1 2 1 17 1
1 2 1 18 0
1 2 1 19 0
1 2 1 20 0
1 2 2 1 1
1 2 2 2 1
1 2 2 3 0
1 2 2 4 1
1 2 2 5 1
1 2 2 6 1
1 2 2 7 0
1 2 2 8 0
1 2 2 9 0
1 2 2 10 0
1 2 2 11 0
1 2 2 12 0
1 2 2 13 1
1 2 2 14 0
1 2 2 15 1
1 2 2 16 1
1 2 2 17 1
1 2 2...

input:

2
1 1000 500
1
0
0
1
1
1
1
1
0
0
1
0
1
1
1
1
1
1
1
1
0
1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
0
1
1
0
1
1
1
1
0
1
1
0
0
0
1
1
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
1
1
0
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0

output:

2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 249
2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 510
2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 240
2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 945
2 2 1
2 2 2
2 2 3
2 2 4
...

result:

wrong answer Invalid node index to goTo

Subtask #2:

score: 0
Time Limit Exceeded

Test #5:

score: 0
Time Limit Exceeded

input:

1
2 1000
1 133
2 133
3 133
4 133
5 133
6 133
7 133
8 133
9 133
10 133
11 133
12 133
13 133
14 133
15 133
16 133
17 133
18 133
19 133
20 133
21 133
22 133
23 133
24 133
25 133
26 133
27 133
28 133
29 133
30 133
31 133
32 133
33 133
34 133
35 133
36 133
37 133
38 133
39 133
40 133
41 133
42 133
43 133...

output:

1 1 20
1 2 1 11 1
1 2 1 12 0
1 2 1 13 1
1 2 1 14 0
1 2 1 15 0
1 2 1 16 0
1 2 1 17 0
1 2 1 18 1
1 2 1 19 0
1 2 1 20 0
1 2 2 1 1
1 2 2 2 0
1 2 2 3 1
1 2 2 4 0
1 2 2 5 0
1 2 2 6 0
1 2 2 7 0
1 2 2 8 1
1 2 2 9 0
1 2 2 10 0
1 2 2 11 1
1 2 2 12 1
1 2 2 13 0
1 2 2 14 0
1 2 2 15 0
1 2 2 16 0
1 2 2 17 0
1 2 2...

input:

2
2 1000 651
1
0
1
0
0
0
0
1
0
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0

output:

2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 133
2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 1
2 2 11
2 2 12
2 2 13
2 2 14
2 2 15
2 2 16
2 2 17
2 2 18
2 2 19
2 2 20
2 3 1
2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 0

result:

wrong answer Invalid node index to goTo

Subtask #3:

score: 0
Time Limit Exceeded

Test #7:

score: 0
Time Limit Exceeded

input:

1
3 1000
1 20
1 569
2 69
2 72
3 510
3 811
4 278
4 994
5 890
5 918
6 97
6 577
7 11
7 791
8 138
8 653
9 219
9 539
10 22
10 151
11 527
12 195
12 420
13 187
13 293
14 265
14 476
15 594
15 988
16 424
16 881
17 407
17 613
18 178
18 471
19 400
19 896
20 95
21 221
21 949
22 624
23 247
23 361
24 140
24 169
2...

output:

1 1 20
1 2 1 11 0
1 2 1 12 0
1 2 1 13 1
1 2 1 14 0
1 2 1 15 1
1 2 1 16 0
1 2 1 17 0
1 2 1 18 0
1 2 1 19 0
1 2 1 20 0
1 2 2 1 0
1 2 2 2 0
1 2 2 3 0
1 2 2 4 1
1 2 2 5 0
1 2 2 6 0
1 2 2 7 1
1 2 2 8 0
1 2 2 9 0
1 2 2 10 0
1 2 2 11 1
1 2 2 12 0
1 2 2 13 1
1 2 2 14 0
1 2 2 15 0
1 2 2 16 0
1 2 2 17 1
1 2 2...

input:

2
3 1000 986
0
0
1
1
0
1
0
0
1
0
1
0
1
1
0
1
1
0
1
1
0
1
0
0
0
0
0
0
0
1
0
0
1
1
0
0
0
1
0
1
0
1
1
1
0
1
0
1
0
1
1
1
0
0
1
1
0
0
1
0
1
0
1
0
1
1
1
1
0
0
0
0
0
0
1
0
1
1
0
0
1
0
1
0
0
1
1
1
1
0
0
0
1
1
1
1
0
1
1
0
0
0
0
1
1
0
0
0
1
1
1
0
1
0
0
0
0
0
1
0
1
0
0
0
1
0
1
1
1
1
0
1
0
0
0
0
1
0
0
1
0
0
1
0...

output:

2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 300
2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 438
2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 128
2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 849
2 2 1
2 2 2
2 2 3
2 2 4
...

result:

wrong answer Invalid node index to goTo

Subtask #4:

score: 0
Time Limit Exceeded

Test #10:

score: 0
Time Limit Exceeded

input:

1
4 1000
1 103
1 881
2 195
2 740
3 224
4 558
5 749
5 788
6 189
7 221
8 362
9 267
9 547
10 205
10 813
10 926
11 23
12 687
13 225
14 366
14 768
15 58
15 156
15 869
16 79
16 225
17 61
17 437
18 500
18 534
18 768
18 989
19 300
20 909
21 970
22 245
22 425
23 528
23 669
23 809
23 890
24 121
24 778
25 845
...

output:

1 1 20
1 2 1 11 1
1 2 1 12 1
1 2 1 13 1
1 2 1 14 0
1 2 1 15 0
1 2 1 16 1
1 2 1 17 1
1 2 1 18 0
1 2 1 19 0
1 2 1 20 0
1 2 2 1 0
1 2 2 2 0
1 2 2 3 1
1 2 2 4 0
1 2 2 5 0
1 2 2 6 1
1 2 2 7 1
1 2 2 8 1
1 2 2 9 0
1 2 2 10 1
1 2 2 11 1
1 2 2 12 1
1 2 2 13 0
1 2 2 14 0
1 2 2 15 0
1 2 2 16 0
1 2 2 17 1
1 2 2...

input:

2
4 1000 196
1
0
0
0
0
1
1
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
0
1
0
0
1
1
0
0
1
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
1
1
0
0
0
0
0
1
1
0
0
1
0
0
1
1
1
1
0
1
0
0
0
1
1
0
0
0
1
1
1
0
1
0
0
1
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
0
1
1
1
0
1
1
0
1
0
1
0
1
1
1
0
0
0
0
1
1
1
1
1
0
0
0
0
0
0
1
0
0
1
1
1
0
0
1
0
0
1
1...

output:

2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 865
2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 884
2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 306
2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 345
2 2 1
2 2 2
2 2 3
2 2 4
...

result:

wrong answer Invalid node index to goTo

Subtask #5:

score: 0
Time Limit Exceeded

Test #16:

score: 0
Time Limit Exceeded

input:

1
5 1000
1 296
1 974
2 414
3 777
4 158
4 918
5 535
5 799
5 952
6 290
7 17
7 420
8 223
9 600
10 743
11 189
11 239
11 530
11 619
12 27
12 451
13 580
14 165
15 552
15 753
16 883
16 936
17 292
17 398
17 904
18 355
18 678
19 807
20 577
21 392
21 744
22 600
23 582
23 717
23 915
24 70
24 254
24 492
25 115
...

output:

1 1 20
1 2 1 11 0
1 2 1 12 0
1 2 1 13 0
1 2 1 14 1
1 2 1 15 0
1 2 1 16 1
1 2 1 17 0
1 2 1 18 0
1 2 1 19 1
1 2 1 20 0
1 2 2 1 0
1 2 2 2 1
1 2 2 3 1
1 2 2 4 1
1 2 2 5 1
1 2 2 6 0
1 2 2 7 0
1 2 2 8 1
1 2 2 9 1
1 2 2 10 0
1 2 2 11 0
1 2 2 12 0
1 2 2 13 0
1 2 2 14 1
1 2 2 15 0
1 2 2 16 0
1 2 2 17 0
1 2 2...

input:

2
5 1000 274
1
0
1
1
0
1
0
0
1
0
1
1
1
0
0
0
0
1
0
1
0
1
0
1
0
0
0
1
0
1
0
0
1
1
1
1
1
1
0
0
0
1
0
1
1
0
0
0
0
1
0
0
1
0
1
0
0
1
0
0
0
0
1
1
0
1
0
1
0
0
0
0
0
0
1
0
1
0
0
1
1
1
0
1
0
1
0
1
1
1
1
1
0
1
0
1
1
0
1
0
1
1
0
1
0
1
0
0
1
1
0
1
0
0
1
1
1
1
0
0
1
0
1
1
1
1
0
1
1
1
1
1
0
0
1
1
1
0
1
0
0
0
1
1...

output:

2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 301
2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 323
2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 162
2 2 1
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 2 10
2 3 287
2 2 1
2 2 2
2 2 3
2 2 4
...

result:

wrong answer Invalid node index to goTo