Submission #1133104

#TimeUsernameProblemLanguageResultExecution timeMemory
1133104adaawfNavigation 2 (JOI21_navigation2)C++20
100 / 100
307 ms1012 KiB
#include <iostream>
#include <vector>
#include <cstring>
#include "Anna.h"
using namespace std;
int aa[105][105], bb[105][105], f[105][105], dd[105];
void Anna(int n, int k, vector<int> r, vector<int> c) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            int h = (i % 3) * 3 + (j % 3);
            bb[i][j] = aa[i][j] = h;
            f[i][j] = 0;
        }
    }
    memset(dd, 0, sizeof dd);
    int fl = 0;
    for (int jj = 0; jj < 3; jj++) {
        for (int kk = 0; kk < 3; kk++) {
            int flag = 0;
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    if (aa[i][j] >= 7) continue;
                    if (r[aa[i][j]] == i && c[aa[i][j]] == j) {
                        flag = 1;
                    }
                }
            }
            if (flag == 0) {
                fl = 1;
                break;
            }
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    aa[i][j]++;
                    if (aa[i][j] % 3 == 0) aa[i][j] -= 3;
                }
            }
        }
        if (fl == 1) break;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                aa[i][j] += 3;
                aa[i][j] %= 9;
            }
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            int h = aa[i][j];
            if (h == 8) {
                f[i][j] = 13;
            }
            else if (h != 7) {
                int x = r[h], y = c[h];
                if (abs(x - i) > abs(y - j)) {
                    if (abs(x - i) == 1) {
                        if (x < i) f[i][j] = 4;
                        else f[i][j] = 3;
                    }
                    else {
                        if (x < i) f[i][j] = 12;
                        else f[i][j] = 11;
                    }
                }
                else {
                    if (abs(x - i) == 1 && abs(y - j) == 1) {
                        if (x < i && y < j) f[i][j] = 5;
                        if (x > i && y < j) f[i][j] = 6;
                        if (x < i && y > j) f[i][j] = 7;
                        if (x > i && y > j) f[i][j] = 8;
                    }
                    else if (abs(y - j) == 1) {
                        if (y > j) f[i][j] = 1;
                        else f[i][j] = 2;
                    }
                    else {
                        if (y > j) f[i][j] = 9;
                        else f[i][j] = 10;
                    }
                }
            }
            dd[f[i][j]] = 1;
        }
    }
    int h;
    for (int i = 1; i <= 13; i++) {
        if (dd[i] == 0) {
            h = i;
            break;
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (aa[i][j] == 7) SetFlag(i, j, h);
            else if (f[i][j] > h) SetFlag(i, j, f[i][j] - 1);
            else SetFlag(i, j, f[i][j]);
        }
    }
}
#include <iostream>
#include <vector>
#include "Bruno.h"
using namespace std;
int b[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}}, a[4][4];
int dx[] = {0, 0, 0, 1, -1, -1, 1, -1, 1}, dy[] = {0, 1, -1, 0, 0, -1, -1, 1, 1};
vector<int> Bruno(int k, vector<int> aa) {
    vector<int> res(7);
    int fl = 0;
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (aa[i * 3 + j] == 12) {
                int h = (j + 2) % 3 + i * 3;
                h = aa[h];
                for (int k = 0; k < aa.size(); k++) {
                    if (aa[k] >= h) aa[k]++;
                }
                for (int k = 0; k < 3; k++) {
                    for (int l = 0; l < 3; l++) {
                        a[k][l] = b[(k + 2 - i) % 3][(l + 2 - j) % 3];
                    }
                }
                fl = 1;
                break;
            }
        }
        if (fl == 1) break;
    }
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (a[i][j] >= 7) continue;
            if (aa[i * 3 + j] > 8) res[a[i][j]] = aa[i * 3 + j] - 9;
            else {
                int x = i + dx[aa[i * 3 + j]], y = j + dy[aa[i * 3 + j]];
                if (x == 1 && y == 1) res[a[i][j]] = 4;
                else if (y < 1) res[a[i][j]] = 1;
                else if (y > 1) res[a[i][j]] = 0;
                else if (x < 1) res[a[i][j]] = 3;
                else res[a[i][j]] = 2;
            }
        }
    }
    return res;
}

#Verdict Execution timeMemoryGrader output
Fetching results...