Submission #1307588

#TimeUsernameProblemLanguageResultExecution timeMemory
1307588I_am_Polish_GirlNavigation 2 (JOI21_navigation2)C++20
0 / 100
0 ms664 KiB
#include "Anna.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <numeric>
#include <set>
#include <queue>

using namespace std;

namespace {
    

} // namespace

void Anna(int N, int K, std::vector<int> R, std::vector<int> C) {
    map<pair <int, int>, int> mp;

    int I = 0;

    for (int i = -2; i <= 2; i++)
    {
        for (int j = -2; j <= 2; j++)
        {
            if (abs(i) + abs(j) > 2)
                continue;


            mp[{i, j}] = I;
            I++;
        }
    }


    vector <vector <int>> u(3);

    u[0] = { 0 , 1 , 2 };
    u[1] = { 3 , 4 , 5 };
    u[2] = { 6 , -1 , -1 };

    for (int r = 0; r < N; r++) {
        for (int c = 0; c < N; c++) {
            int r_ = r % 3;
            int c_ = c % 3;

            int x = u[r_][c_];

            if (x == -1)
            {
                SetFlag(r, c, 14);
                continue;
            }


            int i = R[x];
            int j = C[x];

            int d1 = i - r;
            int d2 = j - c;

            if (abs(d1) >= 2)
            {
                d1 /= abs(d1);
                d1 *= 2;

                SetFlag(r, c, mp[{d1, 0}]);
                continue;
            }

            if (abs(d2) >= 2)
            {
                d2 /= abs(d2);
                d2 *= 2;

                SetFlag(r, c, mp[{0, d2}]);
                continue;
            }

            SetFlag(r, c, mp[{d1, d2}]);
        }
    }
}

#include "Bruno.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <numeric>
#include <set>
#include <queue>

using namespace std;


std::vector<int> Bruno(int K, std::vector<int> value) {




    vector <pair <int, int>> vp;

    for (int i = -2; i <= 2; i++)
    {
        for (int j = -2; j <= 2; j++)
        {
            if (abs(i) + abs(j) > 2)
                continue;


            vp.push_back({ i , j });
        }
    }
    
    vector <vector <int>> a(3);

    a[0] = { value[0] , value[1] , value[2] };
    a[1] = { value[3] , value[4] , value[5] };
    a[2] = { value[6] , value[7] , value[8] };

    int I_ = -1;
    int J_ = -1;

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++)
        {
            int j_ = (j + 1) % 3;

            if (a[i][j] == 14)
            {
                if (a[i][j_] == 14)
                {
                    I_ = i;
                    J_ = j;
                }
            }
        }
    }


    I_ += 3 - 2;
    J_ += 3 - 1;

    I_ %= 3;
    J_ %= 3;


    vector <int> ans(K);


    vector <vector <int>> u(3);

    u[0] = { 0 , 1 , 2 };
    u[1] = { 3 , 4 , 5 };
    u[2] = { 6 , -1 , -1 };


    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            if (u[i][j] == -1)
                continue;

            int x = u[i][j];

            int II = (I_ + i) % 3;
            int JJ = (J_ + j) % 3;


            int y = a[II][JJ];


            int pr_x = vp[y].first;
            int pr_y = vp[y].second;

            if (pr_x == -2)
            {
                ans[x] = 3;
                continue;
            }

            if (pr_x == 2)
            {
                ans[x] = 2;
                continue;
            }

            if (pr_y == -2)
            {
                ans[x] = 1;
                continue;
            }

            if (pr_y == 2)
            {
                ans[x] = 0;
                continue;
            }

            II += pr_x;
            JJ += pr_y;

            if ((II - 1) >= 1)
            {
                ans[x] = 2;
                continue;
            }

            if ((II - 1) <= -1)
            {
                ans[x] = 3;
                continue;
            }


            if ((JJ - 1) >= 1)
            {
                ans[x] = 0;
                continue;
            }

            if ((JJ - 1) <= -1)
            {
                ans[x] = 1;
                continue;
            }

            ans[x] = 4;
        }
    }

    return ans;

}
#Verdict Execution timeMemoryGrader output
Fetching results...