Submission #1220568

#TimeUsernameProblemLanguageResultExecution timeMemory
1220568siewjhNavigation 2 (JOI21_navigation2)C++20
100 / 100
286 ms928 KiB
#include "Anna.h" #include <bits/stdc++.h> using namespace std; namespace { const int MAXN = 101; int N, asg[MAXN][MAXN], fr[7], fc[7], use[9]; bool test(int roff, int coff){ for (int i = 0; i < N; i++) for (int j = 0; j < N; j++){ int br = (i + 3 - roff) % 3, bc = (j + 3 - coff) % 3, flag = br * 3 + bc; if (flag < 7){ int r = fr[flag], c = fc[flag]; if (r <= i - 2) asg[i][j] = 11; else if (r >= i + 2) asg[i][j] = 12; else if (c <= j - 2) asg[i][j] = 9; else if (c >= j + 2) asg[i][j] = 10; else if (r == i - 1){ if (c == j - 1) return 0; else if (c == j) asg[i][j] = 1; else asg[i][j] = 2; } else if (r == i){ if (c == j - 1) asg[i][j] = 3; else if (c == j) asg[i][j] = 4; else asg[i][j] = 5; } else{ if (c == j - 1) asg[i][j] = 6; else if (c == j) asg[i][j] = 7; else asg[i][j] = 8; } if (asg[i][j] <= 8) use[asg[i][j]] = 1; } } int sk; for (int i = 1; i <= 8; i++) if (!use[i]){ sk = i; break; } for (int i = 0; i < N; i++) for (int j = 0; j < N; j++){ int br = (i + 3 - roff) % 3, bc = (j + 3 - coff) % 3, flag = br * 3 + bc; if (flag < 7){ if (asg[i][j] > sk) asg[i][j]--; } else if (flag == 7) asg[i][j] = sk; else asg[i][j] = 12; SetFlag(i, j, asg[i][j]); } return 1; } } void Anna(int N, int K, vector<int> R, vector<int> C){ ::N = N; for (int i = 0; i < K; i++){ fr[i] = R[i]; fc[i] = C[i]; } for (int roff = 0; roff < 3; roff++) for (int coff = 0; coff < 3; coff++){ memset(use, 0, sizeof(use)); if (test(roff, coff)) return; } }
#include "Bruno.h" #include <bits/stdc++.h> using namespace std; vector<int> Bruno(int K, vector<int> value) { int id, rid, cid, sid, sr, sc, sk; for (int i = 0; i < 9; i++) if (value[i] == 12){ rid = (i / 3 + 1) % 3; cid = (i % 3 + 1) % 3; id = rid * 3 + cid; sr = (rid + 2) % 3, sc = (cid + 1) % 3, sid = sr * 3 + sc, sk = value[sid]; for (int x = 0; x < 9; x++) if (x != sid && value[x] >= sk) value[x]++; break; } vector<int> ans(K); for (int i = 0; i < 9; i++){ int r = i / 3, c = i % 3; int insr = (r + 3 - rid) % 3, insc = (c + 3 - cid) % 3, flag = insr * 3 + insc; if (flag < 7){ if (value[i] == 9) ans[flag] = 1; else if (value[i] == 10) ans[flag] = 0; else if (value[i] == 11) ans[flag] = 3; else if (value[i] == 12) ans[flag] = 2; else { int flr = r, flc = c; if (value[i] == 1) flr--; else if (value[i] == 2){ flr--; flc++; } else if (value[i] == 3) flc--; else if (value[i] == 4); else if (value[i] == 5) flc++; else if (value[i] == 6){ flr++; flc--; } else if (value[i] == 7) flr++; else{ flr++; flc++; } if (flr < 1) ans[flag] = 3; else if (flr > 1) ans[flag] = 2; else if (flc < 1) ans[flag] = 1; else if (flc > 1) ans[flag] = 0; else ans[flag] = 4; } } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...