Submission #468866

#TimeUsernameProblemLanguageResultExecution timeMemory
468866superayNavigation 2 (JOI21_navigation2)C++17
100 / 100
873 ms836 KiB
#include "Anna.h" #include <bits/stdc++.h> using namespace std; void Anna(int n, int k, vector<int> r, vector<int> c) { for (int dx = 0; dx < 3; dx++) for (int dy = 0; dy < 3; dy++) { vector<int> vis(9, 0), idx(9); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { int t = ((i + dx) % 3) * 3 + ((j + dy) % 3); if (t < 7 && abs(r[t] - i) <= 1 && abs(c[t] - j) <= 1) { vis[(r[t] - i + 1) * 3 + (c[t] - j + 1)] = 1; } } } if (vis[8]) continue; int ty = -1; for (int i = 0; i < 9; i++) if (!vis[i]) { ty = i; break; } int cc = 0; for (int i = 0; i < 8; i++) if (i != ty) idx[i] = ++cc; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { int t = ((i + dx) % 3) * 3 + ((j + dy) % 3), cur; if (t < 7) { if (abs(r[t] - i) <= 1 && abs(c[t] - j) <= 1) { cur = idx[(r[t] - i + 1) * 3 + (c[t] - j + 1)]; } else if (c[t] > j + 1) { cur = 8; } else if (c[t] < j - 1) { cur = 9; } else if (r[t] > i + 1) { cur = 10; } else { cur = 11; } } else if (t == 7) { cur = 12; } else { cur = ty + 1; } SetFlag(i, j, cur); } } return; } assert(false); }
#include "Bruno.h" #include <bits/stdc++.h> using namespace std; namespace { inline int Get(int x, int y, int v, vector<int> bel) { if (v >= 8) return v - 8; else { int nx = x + bel[v - 1] / 3 - 1, ny = y + bel[v - 1] % 3 - 1; if (ny > 0) return 0; else if (ny < 0) return 1; else if (nx > 0) return 2; else if (nx < 0) return 3; else return 4; } } } vector<int> Bruno(int k, vector<int> vec) { int f1 = -1; for (int i = 0; i < 9; i++) if (vec[i] == 12) { f1 = i; break; } vector<int> idx(9); if (f1 == 7) { idx[0] = 0; } else if (f1 == 6) { idx[0] = 1; } else if (f1 == 8) { idx[0] = 2; } else if (f1 == 4) { idx[0] = 3; } else if (f1 == 3) { idx[0] = 4; } else if (f1 == 5) { idx[0] = 5; } else if (f1 == 1) { idx[0] = 6; } else if (f1 == 0) { idx[0] = 7; } else if (f1 == 2) { idx[0] = 8; } idx[1] = idx[0] / 3 * 3 + (idx[0] % 3 + 1) % 3; idx[2] = idx[0] / 3 * 3 + (idx[0] % 3 + 2) % 3; idx[3] = (idx[0] + 3) % 9; idx[4] = idx[3] / 3 * 3 + (idx[3] % 3 + 1) % 3; idx[5] = idx[3] / 3 * 3 + (idx[3] % 3 + 2) % 3; idx[6] = (idx[3] + 3) % 9; idx[7] = idx[6] / 3 * 3 + (idx[6] % 3 + 1) % 3; idx[8] = idx[6] / 3 * 3 + (idx[6] % 3 + 2) % 3; int ty = -1; for (int i = 0; i < 9; i++) if (idx[i] == 8) ty = vec[i] - 1; vector<int> bel(8); for (int i = 0; i < 8; i++) bel[i] = i; bel.erase(find(bel.begin(), bel.end(), ty)); vector<int> ret(7); for (int i = 0; i < 9; i++) if (idx[i] < 7) { ret[idx[i]] = Get(i / 3 - 1, i % 3 - 1, vec[i], bel); } return ret; }
#Verdict Execution timeMemoryGrader output
Fetching results...