Submission #1361965

#TimeUsernameProblemLanguageResultExecution timeMemory
1361965brintonCasino (JOI26_casino)C++20
100 / 100
313 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<vector<int>> Azzurro(int N, int L, string S) {
    
    vector<int> bitcode;
    for(int i = 0;i < 51;i++){
        if(i < L) {
            if(S[i] == 'A') bitcode.push_back(0);
            else bitcode.push_back(1);
        }else{
            bitcode.push_back(0);
        }
    }
    vector<vector<int>> ret(N, vector<int>(N, 0));

    int infoid = -1;
    auto get_info = [&](){
        infoid++;
        return bitcode[infoid];
    };

    int lastId = 0;
    for(int row = 0;row <= 14;row++){
        vector<pair<int,int>> loc;
        for(int i = 0;i < 8;i++){
            if(row-i >= 0 && row-i < 8) loc.push_back({i,row-i});
        }
        if(loc.size() == 1){
            ret[loc[0].first][loc[0].second] = get_info();
        }else{
            int sum = 0;
            for(int i = 0;i < loc.size();i++){
                auto [x,y] = loc[i];
                if(i == loc.size()-1){
                    ret[x][y] = sum%2;
                    continue;
                }
                ret[x][y] = get_info();
                if(i%2 == (loc.size()-1)%2) sum += ret[x][y];
            }
        }
    }
    // cout << "origin: " << endl;;
    // for(int i = 0;i < N;i++){
    //     for(int j = 0;j < N;j++){
    //         cout << ret[i][j] << " ";
    //     }
    //     cout << endl;
    // }
    return ret;
}
#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; }
}

string Bordeaux(int N, int L, vector<vector<int>> T) {
    vector<int> bitcode;

    // cout << "#" << L << endl;
    // for(int i = 0;i < N;i++){
    //     for(int j = 0;j < N;j++){
    //         cout << T[i][j] << " ";
    //     }
    //     cout << endl;
    // }
    int lastId = 0;
    for(int row = 0;row <= 14;row++){
        vector<pair<int,int>> loc;
        auto reverse = [&](int i){
            // cout << "row: " << row << ", reverse: " << i << endl;
            auto [x,y] = loc[i];
            T[x][y] = 1-T[x][y];
            lastId = i;
        };
        for(int i = 0;i < 8;i++){
            if(row-i >= 0 && row-i < 8) loc.push_back({i,row-i});
        }
        if(loc.size() == 1){
            reverse(0);
            bitcode.push_back(T[loc[0].first][loc[0].second]);
        }else{
            int sum = 0;
            for(int i = loc.size()-1;i >= 0;i-=2){
                auto [x,y] = loc[i];
                sum += T[x][y];
            }
            {
                int poss1,poss2;
                if(row <= 7){
                    poss1 = lastId,poss2 = lastId+1;
                }else{
                    poss1 = lastId-1,poss2 = lastId;
                }
                if(sum%2 == 1){
                    if((poss1+2)%2 == (loc.size()-1)%2){
                        reverse(poss1);
                    }else{
                        reverse(poss2);
                    }
                }else{
                    if((poss1+2)%2 == (loc.size()-1)%2){
                        reverse(poss2);
                    }else{
                        reverse(poss1);
                    }
                }
            }
            for(int i = 0;i < loc.size()-1;i++){
                bitcode.push_back(T[loc[i].first][loc[i].second]);
            }
        }
    }

    string ret;
    for(int i = 0;i < L;i++){
        if(bitcode[i] == 0) ret += 'A';
        else ret += 'B';
    }
	return ret;
}
#Result Execution timeMemoryGrader output
Fetching results...