제출 #1362128

#제출 시각아이디문제언어결과실행 시간메모리
1362128UnforgettableplCasino (JOI26_casino)C++20
0 / 100
276 ms776 KiB
#include <bits/stdc++.h>
using namespace std;

namespace {
    vector<vector<int>> assemble(vector<vector<int>> base,int N){
        assert(base.size()==2*N-1);
        vector<vector<int>> x(N,vector<int>(N,0));
        for(int round=0;round<2*N-1;round++){
            if(round<N){
                assert(base[round].size()==round+1);
                for(int i=0;i<=round;i++){
                    x[i][round-i]=base[round][i];
                }
            } else {
                int cnt = 2*N - round - 1;
                assert(base[round].size()==cnt);
                int inner = 0;
                for(int i=round-N+1;i<N;i++){
                    x[i][round-i]=base[round][inner++];
                }
            }
        }
        return x;
    };
}

vector<vector<int>> Azzurro(int N,int L,string S){
    vector<vector<int>> base(2*N-1);
    auto iter = S.begin();
    auto getNext = [&](){
        if(iter==S.end())return 0;
        if((*iter++) == 'A')return 0;
        return 1;
    };
    for(int i=0;i<2*N-1;i++){
        if(i<N){
            for(int j=0;j<i;j++)
                base[i].emplace_back(getNext());
        } else {
            int cnt = 2*N - i - 2;
            for(int j=0;j<cnt;j++)
                base[i].emplace_back(getNext());
        }
        int XOR = 0;
        for(int j=1;j<base[i].size();j+=2)XOR^=base[i][j];
        base[i].emplace(base[i].begin(),XOR);
    }
    auto ans = assemble(base,N);
    ans[0][0]=getNext();
    ans[N-1][N-1]=getNext();
    return ans;
}
#include <bits/stdc++.h>
using namespace std;

namespace {
    vector<vector<int>> dissemble(vector<vector<int>> x,int N){
        vector<vector<int>> base(2*N-1);
        for(int round=0;round<2*N-1;round++){
            if(round<N){
                for(int i=0;i<=round;i++){
                    base[round].emplace_back(x[i][round-i]);
                }
            } else {
                int cnt = 2*N - round - 1;
                for(int i=round-N+1;i<N;i++){
                    base[round].emplace_back(x[i][round-i]);
                }
            }
        }
        return base;
    };
}

string Bordeaux(int N,int L,vector<vector<int>> T){
    auto base = dissemble(T,N);
    string s;
    auto addNext = [&](int x){
        if(x)s.push_back('B');
        else s.push_back('A');
    };
    int oddViolater = 0;
    int evenViolater = 0;
    for(int i=0;i<2*N-1;i++){
        int XOR = 0;
        for(int j=0;j<base[i].size();j+=2)XOR^=base[i][j];
        int violater = oddViolater;
        if(XOR)violater = evenViolater;
        base[i][violater]^=1;
        for(int j=1;j<base[i].size();j++)addNext(base[i][j]);

        oddViolater = violater;
        evenViolater = violater+1;

        if(i>=N-1){
            evenViolater = violater-1;  
        } 
        if(evenViolater&1)swap(oddViolater,evenViolater);
    }
    addNext(T[0][0]^1);
    addNext(T[N-1][N-1]^1);
    s.resize(L);
	return s;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…