제출 #1364506

#제출 시각아이디문제언어결과실행 시간메모리
1364506HasanV11010238Casino (JOI26_casino)C++20
0 / 100
0 ms768 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 (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;
            }
            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 (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;
            }
        }
        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 (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';
            }
            cur++;
        }
        if (i == 0 || i == 2 * N - 2){
            x = 0, y = 0;
        }
    }
    cout<<s<<"\n";
    return s;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…