Submission #216322

# Submission time Handle Problem Language Result Execution time Memory
216322 2020-03-27T05:23:12 Z model_code Stray Cat (JOI20_stray) C++17
100 / 100
88 ms 16448 KB
#include "Anthony.h"
#include <queue>
#include <utility>
#include <vector>

namespace {

using std::vector;

}  // namespace

std::vector<int> Mark(int N, int M, int A, int B,
                      std::vector<int> U, std::vector<int> V) {
  vector<vector<int>> G(N);
  for (int i = 0; i < M; ++i) {
    G[U[i]].push_back(i);
    G[V[i]].push_back(i);
  }
  std::queue<int> que;
  vector<int> dist(N, N);
  vector<int> colors(N, -1);
  dist[0] = 0;
  que.push(0);
  for (; !que.empty(); ) {
    const int u = que.front();
    que.pop();
    for (const int i : G[u]) {
      const int v = U[i] ^ V[i] ^ u;
      if (dist[v] > dist[u] + 1) {
        dist[v] = dist[u] + 1;
        que.push(v);
        if (A == 2) {
          if (u == 0) {
            colors[v] = 0;
          } else if (G[u].size() >= 3) {
            colors[v] = ("010011"[colors[u]] == '0') ? 1 : 0;
          } else {
            colors[v] = (colors[u] + 1) % 6;
          }
        }
      }
    }
  }
  vector<int> x(M, -1);
  for (int i = 0; i < M; ++i) {
    int u = U[i], v = V[i];
    if (dist[u] > dist[v]) {
      std::swap(u, v);
    }
    if (A == 2) {
      x[i] = "010011"[colors[v]] - '0';
    } else {
      x[i] = dist[u] % 3;
    }
  }
  return x;
}
#include "Catherine.h"
#include <assert.h>
#include <algorithm>
#include <string>
#include <vector>

namespace {

using std::string;

int A, B;
int last = -1;
bool known = false;
string seq = "";

}  // namespace

void Init(int A, int B) {
  ::A = A;
  ::B = B;
}

int Move(std::vector<int> y) {
  int ans = -2;
  auto yy = y;
  if (last != -1) {
    ++yy[last];
  }
  if (A == 2) {
    int deg = 0;
    for (int k = 0; k < 2; ++k) {
      deg += yy[k];
    }
    if (deg == 2) {
      if (known) {
        assert(std::count(y.begin(), y.end(), 1) == 1);
        ans = std::find(y.begin(), y.end(), 1) - y.begin();
      } else {
        for (int k = 0; k < 2; ++k) {
          seq += string(y[k], static_cast<char>('0' + k));
        }
        if (seq.size() == 5) {
          bool rev = false;
          for (int rot = 0; rot < 6; ++rot) {
            if (seq == string("010011010011").substr(rot, 5)) {
              rev = true;
            }
          }
          known = true;
          if (rev) {
            ans = -1;
          } else {
            assert(std::count(y.begin(), y.end(), 1) == 1);
            ans = std::find(y.begin(), y.end(), 1) - y.begin();
          }
        } else {
          ans = seq.back() - '0';
        }
      }
    } else {
      known = true;
      assert(std::count(yy.begin(), yy.end(), 1) == 1);
      ans = std::find(yy.begin(), yy.end(), 1) - yy.begin();
      if (ans == last) {
        ans = -1;
      }
    }
  } else {
    int flag = 0;
    for (int k = 0; k < 3; ++k) {
      if (yy[k] > 0) {
        flag |= 1 << k;
      }
    }
    switch (flag) {
      case 0b001: case 0b011: ans = 0; break;
      case 0b010: case 0b110: ans = 1; break;
      case 0b100: case 0b101: ans = 2; break;
      default: assert(false);
    }
  }
  if (ans != -1) {
    last = ans;
  }
  return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 61 ms 15312 KB Output is correct
2 Correct 9 ms 836 KB Output is correct
3 Correct 50 ms 14532 KB Output is correct
4 Correct 78 ms 16448 KB Output is correct
5 Correct 80 ms 16380 KB Output is correct
6 Correct 69 ms 14952 KB Output is correct
7 Correct 67 ms 15188 KB Output is correct
8 Correct 77 ms 15740 KB Output is correct
9 Correct 79 ms 15844 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 61 ms 15312 KB Output is correct
2 Correct 9 ms 836 KB Output is correct
3 Correct 50 ms 14532 KB Output is correct
4 Correct 78 ms 16448 KB Output is correct
5 Correct 80 ms 16380 KB Output is correct
6 Correct 69 ms 14952 KB Output is correct
7 Correct 67 ms 15188 KB Output is correct
8 Correct 77 ms 15740 KB Output is correct
9 Correct 79 ms 15844 KB Output is correct
10 Correct 54 ms 13008 KB Output is correct
11 Correct 63 ms 13040 KB Output is correct
12 Correct 62 ms 13032 KB Output is correct
13 Correct 57 ms 13096 KB Output is correct
14 Correct 58 ms 13236 KB Output is correct
15 Correct 72 ms 13680 KB Output is correct
16 Correct 68 ms 15928 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 62 ms 12904 KB Output is correct
2 Correct 10 ms 772 KB Output is correct
3 Correct 53 ms 12276 KB Output is correct
4 Correct 88 ms 14156 KB Output is correct
5 Correct 78 ms 14076 KB Output is correct
6 Correct 69 ms 12928 KB Output is correct
7 Correct 61 ms 12796 KB Output is correct
8 Correct 82 ms 13540 KB Output is correct
9 Correct 78 ms 13428 KB Output is correct
10 Correct 74 ms 13300 KB Output is correct
11 Correct 66 ms 13316 KB Output is correct
12 Correct 72 ms 13212 KB Output is correct
13 Correct 65 ms 13352 KB Output is correct
14 Correct 79 ms 13504 KB Output is correct
15 Correct 68 ms 13556 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 62 ms 12904 KB Output is correct
2 Correct 10 ms 772 KB Output is correct
3 Correct 53 ms 12276 KB Output is correct
4 Correct 88 ms 14156 KB Output is correct
5 Correct 78 ms 14076 KB Output is correct
6 Correct 69 ms 12928 KB Output is correct
7 Correct 61 ms 12796 KB Output is correct
8 Correct 82 ms 13540 KB Output is correct
9 Correct 78 ms 13428 KB Output is correct
10 Correct 74 ms 13300 KB Output is correct
11 Correct 66 ms 13316 KB Output is correct
12 Correct 72 ms 13212 KB Output is correct
13 Correct 65 ms 13352 KB Output is correct
14 Correct 79 ms 13504 KB Output is correct
15 Correct 68 ms 13556 KB Output is correct
16 Correct 51 ms 11212 KB Output is correct
17 Correct 48 ms 11208 KB Output is correct
18 Correct 50 ms 11128 KB Output is correct
19 Correct 62 ms 11120 KB Output is correct
20 Correct 66 ms 11832 KB Output is correct
21 Correct 53 ms 11512 KB Output is correct
22 Correct 68 ms 13556 KB Output is correct
23 Correct 68 ms 11256 KB Output is correct
24 Correct 54 ms 11256 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 10 ms 1044 KB Output is correct
2 Correct 10 ms 696 KB Output is correct
3 Correct 10 ms 1048 KB Output is correct
4 Correct 10 ms 1164 KB Output is correct
5 Correct 10 ms 1036 KB Output is correct
6 Correct 11 ms 1036 KB Output is correct
7 Correct 10 ms 1044 KB Output is correct
8 Correct 11 ms 1324 KB Output is correct
9 Correct 10 ms 1136 KB Output is correct
10 Correct 10 ms 1152 KB Output is correct
11 Correct 10 ms 1044 KB Output is correct
12 Correct 11 ms 1172 KB Output is correct
13 Correct 11 ms 1036 KB Output is correct
14 Correct 10 ms 1036 KB Output is correct
15 Correct 10 ms 1044 KB Output is correct
16 Correct 10 ms 1172 KB Output is correct
17 Correct 11 ms 1036 KB Output is correct
18 Correct 10 ms 1044 KB Output is correct
19 Correct 10 ms 1404 KB Output is correct
20 Correct 11 ms 1036 KB Output is correct
21 Correct 10 ms 1036 KB Output is correct
22 Correct 10 ms 1044 KB Output is correct
23 Correct 10 ms 1036 KB Output is correct
24 Correct 10 ms 1172 KB Output is correct
25 Correct 10 ms 1124 KB Output is correct
26 Correct 11 ms 1044 KB Output is correct
27 Correct 10 ms 1044 KB Output is correct
28 Correct 10 ms 1036 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 52 ms 10992 KB Output is correct
2 Correct 59 ms 11516 KB Output is correct
3 Correct 9 ms 920 KB Output is correct
4 Correct 48 ms 11016 KB Output is correct
5 Correct 73 ms 12136 KB Output is correct
6 Correct 72 ms 12252 KB Output is correct
7 Correct 63 ms 11260 KB Output is correct
8 Correct 55 ms 11260 KB Output is correct
9 Correct 71 ms 12156 KB Output is correct
10 Correct 71 ms 12148 KB Output is correct
11 Correct 73 ms 12252 KB Output is correct
12 Correct 74 ms 12148 KB Output is correct
13 Correct 66 ms 12148 KB Output is correct
14 Correct 78 ms 12248 KB Output is correct
15 Correct 80 ms 12284 KB Output is correct
16 Correct 84 ms 12284 KB Output is correct
17 Correct 80 ms 11956 KB Output is correct
18 Correct 64 ms 11768 KB Output is correct
19 Correct 62 ms 11900 KB Output is correct
20 Correct 65 ms 11860 KB Output is correct
21 Correct 69 ms 11972 KB Output is correct
22 Correct 69 ms 11900 KB Output is correct
23 Correct 51 ms 11168 KB Output is correct
24 Correct 51 ms 11072 KB Output is correct
25 Correct 52 ms 11124 KB Output is correct
26 Correct 55 ms 11132 KB Output is correct
27 Correct 69 ms 11528 KB Output is correct
28 Correct 61 ms 11652 KB Output is correct
29 Correct 69 ms 11636 KB Output is correct
30 Correct 59 ms 11520 KB Output is correct
31 Correct 53 ms 11004 KB Output is correct
32 Correct 57 ms 11004 KB Output is correct
33 Correct 57 ms 11124 KB Output is correct
34 Correct 55 ms 11388 KB Output is correct
35 Correct 62 ms 11504 KB Output is correct
36 Correct 57 ms 11496 KB Output is correct
37 Correct 58 ms 11380 KB Output is correct
38 Correct 56 ms 11468 KB Output is correct
39 Correct 63 ms 11532 KB Output is correct
40 Correct 61 ms 11516 KB Output is correct
41 Correct 62 ms 11756 KB Output is correct
42 Correct 60 ms 11784 KB Output is correct
43 Correct 73 ms 11804 KB Output is correct
44 Correct 71 ms 11900 KB Output is correct
45 Correct 61 ms 12008 KB Output is correct
46 Correct 71 ms 12020 KB Output is correct
47 Correct 57 ms 11504 KB Output is correct
48 Correct 55 ms 11508 KB Output is correct
49 Correct 54 ms 11396 KB Output is correct
50 Correct 67 ms 11644 KB Output is correct
51 Correct 54 ms 11516 KB Output is correct
52 Correct 55 ms 11132 KB Output is correct
53 Correct 55 ms 11268 KB Output is correct
54 Correct 51 ms 11396 KB Output is correct
55 Correct 53 ms 11260 KB Output is correct
56 Correct 50 ms 11268 KB Output is correct
57 Correct 52 ms 11288 KB Output is correct
58 Correct 55 ms 11200 KB Output is correct
59 Correct 61 ms 11224 KB Output is correct
60 Correct 62 ms 11260 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 53 ms 11084 KB Output is correct
2 Correct 56 ms 11388 KB Output is correct
3 Correct 9 ms 1028 KB Output is correct
4 Correct 44 ms 11116 KB Output is correct
5 Correct 62 ms 12152 KB Output is correct
6 Correct 70 ms 12156 KB Output is correct
7 Correct 54 ms 11276 KB Output is correct
8 Correct 54 ms 11284 KB Output is correct
9 Correct 59 ms 12176 KB Output is correct
10 Correct 69 ms 12124 KB Output is correct
11 Correct 67 ms 12220 KB Output is correct
12 Correct 66 ms 12276 KB Output is correct
13 Correct 66 ms 12148 KB Output is correct
14 Correct 64 ms 12148 KB Output is correct
15 Correct 69 ms 12156 KB Output is correct
16 Correct 69 ms 12284 KB Output is correct
17 Correct 63 ms 12156 KB Output is correct
18 Correct 66 ms 11764 KB Output is correct
19 Correct 64 ms 11852 KB Output is correct
20 Correct 63 ms 11900 KB Output is correct
21 Correct 66 ms 11764 KB Output is correct
22 Correct 64 ms 11900 KB Output is correct
23 Correct 56 ms 10980 KB Output is correct
24 Correct 54 ms 11132 KB Output is correct
25 Correct 52 ms 11044 KB Output is correct
26 Correct 56 ms 11096 KB Output is correct
27 Correct 61 ms 11892 KB Output is correct
28 Correct 56 ms 11508 KB Output is correct
29 Correct 62 ms 11636 KB Output is correct
30 Correct 62 ms 11892 KB Output is correct
31 Correct 52 ms 11132 KB Output is correct
32 Correct 54 ms 11232 KB Output is correct
33 Correct 50 ms 11268 KB Output is correct
34 Correct 51 ms 11372 KB Output is correct
35 Correct 62 ms 11596 KB Output is correct
36 Correct 60 ms 11508 KB Output is correct
37 Correct 60 ms 11604 KB Output is correct
38 Correct 56 ms 11468 KB Output is correct
39 Correct 62 ms 11508 KB Output is correct
40 Correct 60 ms 11688 KB Output is correct
41 Correct 67 ms 11808 KB Output is correct
42 Correct 56 ms 11740 KB Output is correct
43 Correct 56 ms 11924 KB Output is correct
44 Correct 65 ms 11764 KB Output is correct
45 Correct 69 ms 11764 KB Output is correct
46 Correct 57 ms 11764 KB Output is correct
47 Correct 60 ms 11516 KB Output is correct
48 Correct 57 ms 11524 KB Output is correct
49 Correct 57 ms 11272 KB Output is correct
50 Correct 55 ms 11488 KB Output is correct
51 Correct 51 ms 11260 KB Output is correct
52 Correct 54 ms 11220 KB Output is correct
53 Correct 55 ms 11436 KB Output is correct
54 Correct 51 ms 11216 KB Output is correct
55 Correct 50 ms 11284 KB Output is correct
56 Correct 52 ms 11268 KB Output is correct
57 Correct 52 ms 11388 KB Output is correct
58 Correct 61 ms 11408 KB Output is correct
59 Correct 57 ms 11260 KB Output is correct
60 Correct 52 ms 11260 KB Output is correct