제출 #1368095

#제출 시각아이디문제언어결과실행 시간메모리
1368095vlomaczkCasino (JOI26_casino)C++20
100 / 100
319 ms840 KiB
#include "Azzurro.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
#define pi pair<int, int>

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) {
    vector<int> A;
    for(int i=0; i<L; ++i) A.pb(S[i]=='A');
    while(A.size() < 51) A.pb(1);
    int idx = 0;
    vector<vector<pi>> poss(2*N - 1);
    for(int s=0; s<=2*N-2; ++s) {
        for(int i=0; i<N; ++i) {
            for(int j=0; j<N; ++j) {
                if(i+j == s) {
                    poss[s].pb({i,j});
                }
            }
        }
    }
    vector<int> sajz(2*N - 1);
    for(int i=0; i<=2*N - 2; ++i) sajz[i] = (int)poss[i].size() - 1;
    sajz[2*N - 3]++;

    vector<vector<int>> R(N, vector<int>(N));

    R[N-1][N-1] = A[50];
    idx = 49;
    for(int s=2*N - 3; s>=1; --s) {
        int ksor = 0;
        for(int i=sajz[s]-1; i>=0; --i) {
            auto[r,c] = poss[s][i];
            R[r][c] = A[idx];
            --idx;
        }
        for(int i=0; i<(int)poss[s].size(); i+=2) {
            auto[r,c] = poss[s][i];
            ksor ^= R[r][c];
        } 
        auto[r,c] = poss[s-1].back();
        R[r][c] = ksor;
    }
    // for(int i=0; i<N; ++i) { for(int j=0; j<N; ++j) { cout << R[i][j]; } cout << "\n"; } cout << "\n";

    return R;
}
#include "Bordeaux.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
#define pi pair<int, int>

namespace {
    // グローバル変数と内部関数は無名名前空間内で宣言すること
    // All global variables and internal functions should be declared in an unnamed namespace
    int variable_example = 0;
    int function_example(void) { return 0; }
    int calc_ksor(vector<pi> pp, int sz, vector<vector<int>> &T) {
        int ksor = 0;
        for(int i=0; i<sz; i+=2) {
            auto[r,c] = pp[i];
            ksor ^= T[r][c];
        }
        return ksor;
    }
}

std::string Bordeaux(int N, int L, std::vector<std::vector<int>> T) {
    vector<vector<pi>> poss(2*N - 1);
    for(int s=0; s<=2*N-2; ++s) {
        for(int i=0; i<N; ++i) {
            for(int j=0; j<N; ++j) {
                if(i+j == s) {
                    poss[s].pb({i,j});
                }
            }
        }
    }
    vector<int> sajz(2*N - 1);
    for(int i=0; i<=2*N - 2; ++i) sajz[i] = (int)poss[i].size() - 1;
    sajz[2*N - 3]++;

    T[0][0] ^= 1;
    T[N-1][N-1] ^= 1;

    vector<int> res;
    int p1 = 0, p2 = 0;
    int parity = T[0][0];
    for(int s=1; s<=2*N - 3; ++s) {
        int sz = poss[s].size();
        int ok = 0;
        if(p1 + 1 < N) {
            p1++;
            T[p1][p2] ^= 1;
            if(calc_ksor(poss[s], poss[s].size(), T) != parity) {
                T[p1][p2] ^= 1;
                p1--;
            } else ok++;
        }
        if(p2 + 1 < N && !ok) {
            p2++;
            T[p1][p2] ^= 1;
            if(calc_ksor(poss[s], poss[s].size(), T) != parity) {
                T[p1][p2] ^= 1;
                p2--;
            } else ok++;
        }
        for(int i=0; i<sajz[s]; ++i) {
            auto[r,c] = poss[s][i];
            res.pb(T[r][c]);
        }
        auto[r,c] = poss[s][sz-1];
        parity = T[r][c];
    }
    res.pb(T[N-1][N-1]);

    string s = "";
    for(int i=0; i<L; ++i) {
        if(res[i]) s.pb('A');
        else s.pb('B');
    }
	return s;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…