Submission #930105

#TimeUsernameProblemLanguageResultExecution timeMemory
930105bachhoangxuanNavigation 2 (JOI21_navigation2)C++17
100 / 100
563 ms2448 KiB
#include "Anna.h"
#include <bits/stdc++.h>
using namespace std;

namespace A{
    const int Col = 13;
    const int maxn = 105;
    int flag[maxn][maxn];

    void solve(int N,int K,vector<int> R,vector<int> C){
        function<int(int,int,int,int)> g = [&](int i,int j,int x,int y){
            if(j<=y-2) return 9;
            if(j>=y+2) return 10;
            if(i<=x-2) return 11;
            if(i>=x+2) return 12;
            int val=(i-x+1)*3+j-y+1+1;
            return (val==9?-1:val);
        };
        function<bool(int)> f = [&](int d){
            for(int i=0;i<N;i++) for(int j=0;j<N;j++){
                int k=(i+(d/3))%3*3+(j+d%3)%3;
                flag[i][j]=(k<7?g(i,j,R[k],C[k]):(k==8?Col:0));
                if(flag[i][j]==-1) return false;
            }
            return true;
        };
        for(int i=0;i<9;i++) if(f(i)) break;
        vector<bool> used(Col+1,0);
        for(int i=0;i<N;i++){
            for(int j=0;j<N;j++) used[flag[i][j]]=true;
        }
        int x=0;
        while(used[x]) x++;
        for(int i=0;i<N;i++) for(int j=0;j<N;j++){
            if(flag[i][j]>x) flag[i][j]--;
            if(flag[i][j]==0) flag[i][j]=x;
            SetFlag(i,j,flag[i][j]);
        }
    }
}

void Anna(int N, int K, std::vector<int> R, std::vector<int> C) {
    A::solve(N,K,R,C);
}
#include "Bruno.h"
#include <bits/stdc++.h>
using namespace std;

namespace B{
    const int Col = 12;
    vector<int> solve(int K,vector<int> value){
        vector<int> res(K,0);
        int dx=-1,dy=-1;
        for(int i=0;i<9;i++) if(value[i]==Col){
            dx=i/3,dy=i%3;
            break;
        }
        int X=value[dx*3+(dy+2)%3];
        function<int(int,int,int,int)> f = [&](int i,int j,int x,int y){
            if(j<y) return 0;
            if(j>y) return 1;
            if(i<x) return 2;
            if(i>x) return 3;
            return 4;
        };
        for(int d=0;d<9;d++){
            int i=(d/3+2-dx)%3,j=(d%3+2-dy)%3;
            int k=i*3+j;
            if(k>=7) continue;
            if(value[d]>=X) value[d]++;
            if(value[d]>=9) res[k]=value[d]-9;
            else{
                int x=d/3+(1-(value[d]-1)/3),y=d%3+(1-(value[d]-1)%3);
                res[k]=f(1,1,x,y);
            }
        }
        return res;
    }
}

std::vector<int> Bruno(int K, std::vector<int> value) {
    return B::solve(K,value);
}
#Verdict Execution timeMemoryGrader output
Fetching results...