제출 #1355223

#제출 시각아이디문제언어결과실행 시간메모리
1355223kaltspielerhyCasino (JOI26_casino)C++20
100 / 100
249 ms844 KiB
#include "Azzurro.h"
#include<bits/stdc++.h>
using namespace std;

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

    vector<string> tab = {"OSSSSSSS","OOOOOOOS","XXXXXXOS","OOOOOXOS","XXXXOXOS","OOOXOXOS","XXOXOXOS","OXOXOXOO"};
}

vector<vector<int>> Azzurro(int N, int L, string S) {
    S.resize(51,'A');
    vector<vector<int>>res(8,vector<int>(8));
    int idx=0;
    for(int iL=0;iL<8;iL++){
        int lig=iL,col=0;
        int xorAct=0;
        while(lig>=0 && col<8){
            if(tab[lig][col] == 'S'){
                res[lig][col] = xorAct;
            }
            else if(tab[lig][col] == 'O'){
                res[lig][col] = (S[idx] == 'A' ? 0 : 1);
                idx++;
            }
            else {
                res[lig][col] = (S[idx] == 'A' ? 0 : 1);
                idx++;
                xorAct ^= res[lig][col];
            }

            lig--;
            col++;
        }
    }

    for(int iCol=1;iCol<8;iCol++){
        int lig=7,col=iCol;
        int xorAct=0;
        while(lig>=0 && col<8){
            if(tab[lig][col] == 'S'){
                res[lig][col] = xorAct;
            }
            else if(tab[lig][col] == 'O'){
                res[lig][col] = (S[idx] == 'A' ? 0 : 1);
                idx++;
            }
            else {
                res[lig][col] = (S[idx] == 'A' ? 0 : 1);
                idx++;
                xorAct ^= res[lig][col];
            }

            lig--;
            col++;
        }
    }

    // cerr<<L<<'\n';
    // if(L == 1)
    // for(int i=0;i<8;i++){
    //     for(int j=0;j<8;j++){
    //         cerr << res[i][j];
    //     }
    //     cerr<<'\n';
    // }

    return res;
}
#include "Bordeaux.h"
#include<bits/stdc++.h>
using namespace std;

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

    vector<string> tab = {"OSSSSSSS","OOOOOOOS","XXXXXXOS","OOOOOXOS","XXXXOXOS","OOOXOXOS","XXOXOXOS","OXOXOXOO"};
}

string Bordeaux(int N, int L, vector<vector<int>> T) {
    vector<vector<int>>res = T;
    string S;
    vector<string>chemin(8,string(8,'O'));
    chemin[0][0]='X';

    int ligAct=0,colAct=0;
    int idx=0;
    for(int iL=1;iL<8;iL++){
        int lig=iL,col=0;
        int xorAct=0;
        while(lig>=0 && col<8){
            if(tab[lig][col] == 'X'){
                xorAct ^= res[lig][col];
            }

            lig--;
            col++;
        }
        lig++;col--;

        if(xorAct == res[lig][col]){
            if(ligAct!=7 && tab[ligAct+1][colAct] == 'O'){
                ligAct++;
            }
            else{
                colAct++;
            }
        }
        else{
            if(ligAct==7 || tab[ligAct+1][colAct] == 'O'){
                colAct++;
            }
            else{
                ligAct++;
            }
        }

        chemin[ligAct][colAct]='X';
    }

    for(int iCol=1;iCol<7;iCol++){
        int lig=7,col=iCol;
        int xorAct=0;
        while(lig>=0 && col<8){
            if(tab[lig][col] == 'X'){
                xorAct ^= res[lig][col];
            }

            lig--;
            col++;
        }
        lig++;col--;

        if(xorAct == res[lig][col]){
            if(ligAct!=7 && tab[ligAct+1][colAct] == 'O'){
                ligAct++;
            }
            else{
                colAct++;
            }
        }
        else{
            if(ligAct==7 || tab[ligAct+1][colAct] == 'O'){
                colAct++;
            }
            else{
                ligAct++;
            }
        }

        chemin[ligAct][colAct]='X';
    }

    chemin[7][7] = 'X';

    string chaine;
    idx=0;
    for(int iL=0;iL<8;iL++){
        int lig=iL,col=0;
        while(lig>=0 && col<8){
            if(tab[lig][col] == 'O' || tab[lig][col] == 'X'){
                chaine.push_back((res[lig][col] ^ (chemin[lig][col] == 'X')) ? 'B' : 'A');
                idx++;

                if(idx == L) return chaine;
            }
            lig--;
            col++;
        }
    }

    for(int iCol=1;iCol<8;iCol++){
        int lig=7,col=iCol;
        while(lig>=0 && col<8){
            if(tab[lig][col] == 'O' || tab[lig][col] == 'X'){
                chaine.push_back((res[lig][col] ^ (chemin[lig][col] == 'X')) ? 'B' : 'A');
                idx++;

                if(idx == L) return chaine;
            }
            lig--;
            col++;
        }
    }

    return chaine;
}
#Verdict Execution timeMemoryGrader output
Fetching results...