Submission #1226239

#TimeUsernameProblemLanguageResultExecution timeMemory
1226239eriksuenderhaufNavigation 2 (JOI21_navigation2)C++20
0 / 100
4 ms816 KiB
#include "Anna.h"
#include <bits/stdc++.h>
using namespace std;

namespace {
} // namespace

void Anna(int N, int K, vector<int> R, vector<int> C) {
  vector<vector<int>> arr(N, vector<int>(N, 0));
  for (int r = 0; r < N; r++) {
    for (int c = 0; c < N; c++) {
      int i = (r % 3) * 3 + (c % 3);
      if (i == 0) {
        arr[r][c] = 1;
        continue;
      }
      if (i == 8) {
        arr[r][c] = 2;
        continue;
      }
      int d = max(abs(R[i - 1] - r), abs(C[i - 1] - c));
      int v;
      if (d <= 1) {
        v = (R[i - 1] - r + 1) * 3 + (C[i - 1] - c + 1) + 6;
      } else {
        v = 2;
        if (R[i - 1] > r + 1)
          v += 2;
        else if (R[i - 1] < r - 1)
          v += 3;
        else if (C[i - 1] > c + 1)
          v += 0;
        else if (C[i - 1] < c - 1)
          v += 1;
      }
      arr[r][c] = v;
    }
  }
  vector<int> used(14);
  for (int r = 0; r < N; r++)
    for (int c = 0; c < N; c++)
      used[arr[r][c]] = 1;
  int x = 6;
  for (int i = 14; i >= 6; i--)
    if (!used[i])
      x = i;
  if (x != 14) {
    for (int r = 0; r < N; r++)
      for (int c = 0; c < N; c++) {
        int i = (r % 3) * 3 + (c % 3);
        if (i == 8)
          arr[r][c] = x;
        if (arr[r][c] > x)
          arr[r][c]--;
      }
  }
  for (int r = 0; r < N; r++)
    for (int c = 0; c < N; c++)
      SetFlag(r, c, arr[r][c]);
}
#include "Bruno.h"
#include <bits/stdc++.h>
using namespace std;

namespace {
} // namespace

vector<int> Bruno(int K, vector<int> value) {
  int r, c, cur_r, cur_c;
  for (int i = 0; i < 9; i++) {
    if (value[i] == 1) {
      r = i / 3;
      c = i % 3;
      cur_r = r + 1 - i / 3;
      cur_c = c + 1 - (i % 3);
      break;
    }
  }
  int unused = value[3 * ((r + 2) % 3) + (c + 2) % 3];
  if (unused < 6)
    unused = 14;
  vector<int> res(K, 0);
  for (int i = 0; i < K; i++) {
    int cc = (c + i + 1) % 3;
    int rr = (r + (i + 1) / 3) % 3;
    int v = value[3 * rr + cc];
    if (v >= 6) {
      v += v >= unused;
      v -= 6;
      int dc = v % 3 - 1;
      int dr = v / 3 - 1;
      cc += dc;
      rr += dr;

      if (rr > cur_r)
        v = 2;
      else if (rr < cur_r)
        v = 3;
      else if (cc > cur_c)
        v = 0;
      else if (cc < cur_c)
        v = 1;
      else
        v = 4;
    } else {
      v -= 2;
    }
    res[i] = v;
  }
  return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...