제출 #1366326

#제출 시각아이디문제언어결과실행 시간메모리
1366326alexddNavigation 2 (JOI21_navigation2)C++20
0 / 100
0 ms688 KiB
#include "Anna.h"
#include <bits/stdc++.h>
using namespace std;

namespace
{
    const int MAXN = 105;
    int who[MAXN][MAXN];
}

void Anna(int N, int K, std::vector<int> R, std::vector<int> C)
{
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            who[i][j] = (i%3) * 3 + (j%3);
            who[i][j] -= 2;
        }
    }

    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            int val = who[i][j];
            if(val < 0)
                SetFlag(i, j, 1);
            else if(R[val] < i - 1)
                SetFlag(i, j, 2 + 3);
            else if(R[val] > i + 1)
                SetFlag(i, j, 2 + 2);
            else if(C[val] < j - 1)
                SetFlag(i, j, 2 + 1);
            else if(C[val] > j + 1)
                SetFlag(i, j, 2 + 0);
            else
            {
                assert(i - 1 <= R[val] && R[val] <= i + 1 && j - 1 <= C[val] && C[val] <= j + 1);
                int mini_poz = (R[val] - (i - 1)) * 3 + (C[val] - (j - 1));
                SetFlag(i, j, 6 + mini_poz);
            }
        }
    }
}
#include "Bruno.h"
#include <bits/stdc++.h>
using namespace std;

namespace
{

    int variable_example = 1;

} // namespace

std::vector<int> Bruno(int K, std::vector<int> flags)
{
    int mat[3][3];
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            mat[i][j] = flags[i*3 + j];

    bool gasit = 0;
    int rx, ry;
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            if(mat[i][j] == 1 && mat[i][(j+1)%3] == 1)
            {
                assert(!gasit);
                gasit = 1;
                rx = i;
                ry = j;
            }
        }
    }
    assert(gasit);

    int newmat[3][3];
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            newmat[i][j] = mat[(rx + i) % 3][(ry + j) % 3];
        }
    }

    int me_x = (1 - rx + 3) % 3;
    int me_y = (1 - ry + 3) % 3;

    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            mat[i][j] = newmat[i][j];

    vector<int> ans(K);
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            int who = i*3 + j, myf = mat[i][j];
            who -= 2;

            if(who < 0)
            {
                assert(myf == 1);
                continue;
            }
            assert(myf != 1);

            assert(0 <= who && who < K);

            if(myf <= 5)
            {
                ans[who] = myf - 2;
            }
            else
            {
                myf -= 6;

                int dx = myf / 3, dy = myf % 3;

                int actual_x = (i - 1) + dx, actual_y = (j - 1) + dy;

                if(actual_y > me_y)
                    ans[who] = 0;
                else if(actual_y < me_y)
                    ans[who] = 1;
                else if(actual_x > me_x)
                    ans[who] = 2;
                else if(actual_x < me_x)
                    ans[who] = 3;
                else
                {
                    assert(actual_x == me_x && actual_y == me_y);
                    ans[who] = 4;
                }
            }
        }
    }

    return ans;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…