# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1220568 | siewjh | Navigation 2 (JOI21_navigation2) | C++20 | 286 ms | 928 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 time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |