제출 #1364517

#제출 시각아이디문제언어결과실행 시간메모리
1364517HasanV11010238Casino (JOI26_casino)C++20
79 / 100
337 ms844 KiB
#include "Azzurro.h"
#include <iostream>
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; }
}

std::vector<std::vector<int>> Azzurro(int N, int L, std::string S) {
    //cout<<"A\n";
    vector<vector<vector<int>>> v(2 * N);
    for (int i = 0; i < N; i++){
        for (int j = 0; j < N; j++){
            v[i + j].push_back({i, j});
        }
    }
    vector<vector<int>> ans(N, vector<int>(N, 0));
    int cur = 0;
    for (int i = 0; i < 2 * N; i++){
        if (i == 1 || i == 2 * N - 3) continue;
        int sz = ((int)v[i].size() + 1) / 2;
        for (int j = 0; j < v[i].size(); j++){
            if (i == 2 || i == 2 * N - 4){
                if (j % 4 == 2 || (j % 2 == 0 && j >= (int)v[i].size() - 2 && i != 0 && i != 2 * N - 2)){
                    ans[v[i][j][0]][v[i][j][1]] = ans[v[i][j - 2][0]][v[i][j - 2][1]];
                    continue;
                }
                if (cur < L && S[cur] == 'B'){
                    ans[v[i][j][0]][v[i][j][1]] = 1;
                }
            }
            else{
                //cout<<i<<" "<<j<<"\n";
                if (j % 4 == 3 || (j % 2 == 1 && j >= (int)v[i].size() - 2 && i != 0 && i != 2 * N - 2)){
                    ans[v[i][j][0]][v[i][j][1]] = ans[v[i][j - 2][0]][v[i][j - 2][1]];
                    continue;
                }
                if (cur < L && S[cur] == 'B'){
                    ans[v[i][j][0]][v[i][j][1]] = 1;
                }
            }
            cur++;
        }
    }
    return ans;
}
#include "Bordeaux.h"
#include <iostream>
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; }
}

std::string Bordeaux(int N, int L, std::vector<std::vector<int>> T) {
    //cout<<"B\n";
    std::string s(L, 'A');
    vector<vector<vector<int>>> v(2 * N);
	for (int i = 0; i < N; i++){
        for (int j = 0; j < N; j++){
            v[i + j].push_back({i, j});
        }
    }
    int cur = 0;
    int x = 0, y = -1;
    for (int i = 0; i < 2 * N; i++){
        if (i == 1 || i == 2 * N - 3){
            for (int j = 0; j < v[i].size(); j++){
                if (T[v[i][j][0]][v[i][j][1]] == 1) x = v[i][j][0], y = v[i][j][1];
            }
            continue;
        }
        int cnt = 0;
        for (int j = 0; j < v[i].size(); j++){
            int di = abs(v[i][j][0] - x) + abs(v[i][j][1] - y);
            if (i == 2 || i == 2 * N - 4){
                if (di == 1) cnt++;
                if (di == 1 && j % 2 == 1){
                    int ind = j - 1;
                    int di2 = abs(v[i][ind][0] - x) + abs(v[i][ind][1] - y);
                    //cout<<x<<" "<<y<<" "<<di2<<"\n";
                    if (di2 != 1){
                        ind = j + 1;
                    }
                    if (ind >= v[i].size()) continue;
                    di2 = abs(v[i][ind][0] - x) + abs(v[i][ind][1] - y);
                    //cout<<x<<" "<<y<<" "<<di2<<"\n";
                    if (di2 != 1) continue;
                    int fr = ind;
                    if (fr >= (int)v[i].size() - 2){
                        fr -= 2;
                    }
                    else{
                        fr ^= 2;
                    }
                    //if (ind < 0 || ind >= v[i].size()) cout<<"Aboba\n"<<" "<<v[i].size()<<" "<<i<<" "<<ind<<"\n";
                    //cout<<"E\n";
                    if (T[v[i][ind][0]][v[i][ind][1]] == T[v[i][fr][0]][v[i][fr][1]]){
                        //cout<<"E1\n";
                        T[v[i][j][0]][v[i][j][1]] ^= 1;
                        x = v[i][j][0], y = v[i][j][1];
                    }
                    else{
                        //cout<<"E2\n";
                        T[v[i][ind][0]][v[i][ind][1]] ^= 1;
                        x = v[i][ind][0], y = v[i][ind][1];
                    }
                    //cout<<"F\n";
                    continue;
                }
            }
            else{
                if (di == 1) cnt++;
                if (di == 1 && j % 2 == 0){
                    int ind = j + 1;
                    if (ind >= v[i].size()) ind = j - 1;
                    if (ind < 0) continue;
                    int di2 = abs(v[i][ind][0] - x) + abs(v[i][ind][1] - y);
                    //cout<<x<<" "<<y<<" "<<di2<<"\n";
                    if (di2 != 1){
                        ind = j - 1;
                    }
                    if (ind < 0) continue;
                    di2 = abs(v[i][ind][0] - x) + abs(v[i][ind][1] - y);
                    //cout<<x<<" "<<y<<" "<<di2<<"\n";
                    if (di2 != 1) continue;
                    int fr = ind;
                    if (fr >= (int)v[i].size() - 2){
                        fr -= 2;
                    }
                    else{
                        fr ^= 2;
                    }
                    //if (ind < 0 || ind >= v[i].size()) cout<<"Aboba\n"<<" "<<v[i].size()<<" "<<i<<" "<<ind<<"\n";
                    //cout<<"E\n";
                    if (T[v[i][ind][0]][v[i][ind][1]] == T[v[i][fr][0]][v[i][fr][1]]){
                        //cout<<"E1\n";
                        T[v[i][j][0]][v[i][j][1]] ^= 1;
                        x = v[i][j][0], y = v[i][j][1];
                    }
                    else{
                        //cout<<"E2\n";
                        T[v[i][ind][0]][v[i][ind][1]] ^= 1;
                        x = v[i][ind][0], y = v[i][ind][1];
                    }
                    //cout<<"F\n";
                    continue;
                }
            }
        }
        for (int j = 0; j < v[i].size(); j++){
            int di = abs(v[i][j][0] - x) + abs(v[i][j][1] - y);
            if (cnt == 1 && di == 1){
                T[v[i][j][0]][v[i][j][1]] ^= 1;
                x = v[i][j][0], y = v[i][j][1];
            }
        }
        for (int j = 0; j < v[i].size(); j++){
            if (i == 2 || i == 2 * N - 4){
                if (j % 4 == 2 || (j % 2 == 0 && j >= (int)v[i].size() - 2 && i != 0 && i != 2 * N - 2)){
                    continue;
                }
                if (cur < L && T[v[i][j][0]][v[i][j][1]] == 1){
                    s[cur] = 'B';
                }
            }
            else{
                if (j % 4 == 3 || (j % 2 == 1 && j >= (int)v[i].size() - 2 && i != 0 && i != 2 * N - 2)){
                    continue;
                }
                if (cur < L && T[v[i][j][0]][v[i][j][1]] == 1){
                    s[cur] = 'B';
                }
            }
            cur++;
        }
        if (i == 0 || i == 2 * N - 2){
            x = 0, y = 0;
        }
    }
    //cout<<s<<"\n";
    return s;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…