Submission #1357555

#TimeUsernameProblemLanguageResultExecution timeMemory
1357555jbn8Casino (JOI26_casino)C++20
100 / 100
238 ms844 KiB
#include "Azzurro.h"

namespace {
    // グローバル変数と内部関数は無名名前空間内で宣言すること
    // All global variables and internal functions should be declared in an unnamed namespace
    int variable_example = 0;
    int function_example(void) { return 0; }
}

std::vector<std::vector<int>> Azzurro(int N, int L, std::string S) {
    std::vector<std::vector<int>> x(N, std::vector<int>(N, 0));
    bool bits[51];
    for(int i=0; i<L; i++){
        bits[i] = S[i]-'A';
    }
    for(int i=L; i<51; i++)bits[i] = 0;
    int index = 0;
    x[0][0] = bits[index++];
    for(int i=1; i<N; i++){
        for(int j=0; j<N-1; j++){
            x[i][j] = bits[index++];
        }
    }
    x[N-1][N-1] = bits[index++];
    for(int diag=1; diag<N*2-2; diag++){
        int i = diag, j = 0;
        if(diag > 7){
            j = diag-7;
            i = N-1;
        }
        int si = i, sj = j;
        int X = 0;
        while(i >= 0 && j < N){
            X ^= x[j][i];
            i -= 2;
            j += 2;
        }
        x[sj][si] = X;
    }
    return x;
}
#include "Bordeaux.h"

namespace {
    // グローバル変数と内部関数は無名名前空間内で宣言すること
    // All global variables and internal functions should be declared in an unnamed namespace
    int variable_example = 0;
    int function_example(void) { return 0; }
}

std::string Bordeaux(const int N, const int L, std::vector<std::vector<int>> T) {
    const int nbDiag = N*2-2;
    bool passed[nbDiag];
    passed[0] = true;
    for(int diag=1; diag<nbDiag; diag++){
        int i = diag, j = 0;
        if(diag > 7){
            j = diag-7;
            i = N-1;
        }
        int si = i, sj = j;
        int X = 0;
        while(i >= 0 && j < N){
            X ^= T[j][i];
            i -= 2;
            j += 2;
        }
        passed[diag] = X;
    }
    int x=0, y=0;
    T[0][0] ^= 1;
    T[N-1][N-1] ^= 1;
    int dists[nbDiag];
    dists[0] = 0;
    for(int diag=1; diag<nbDiag; diag++){
        dists[diag] = dists[diag-1];
        if(passed[diag] != passed[diag-1]){
            if(diag <= 7)
                dists[diag]++;
            else
                dists[diag]--;
        }
    }
    for(int diag=1; diag<nbDiag; diag++){
        int i = diag, j = 0;
        if(diag > 7){
            j = diag-7;
            i = N-1;
        }
        T[j+dists[diag]][i-dists[diag]] ^= 1;
    }
    bool bits[51];
    int index = 0;
    bits[index++] = T[0][0];
    for(int i=1; i<N; i++){
        for(int j=0; j<N-1; j++){
            bits[index++] = T[i][j];
        }
    }
    std::string S(L, 'A');
    bits[index++] = T[N-1][N-1];
    for(int i=0; i<L; i++){
        S[i] = 'A'+bits[i];
    }
   return S;
}
#Verdict Execution timeMemoryGrader output
Fetching results...