#include "Azzurro.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; }
}
std::vector<std::vector<int>> Azzurro(int N, int L, std::string S) {
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 + sz <= v[i].size(); j++){
if (j + sz == v[i].size() && v[i].size() % 2 == 0) continue;
if (cur < L && S[cur] == 'B'){
ans[v[i][j][0]][v[i][j][1]] = 1;
if (j + sz < v[i].size()) ans[v[i][j + sz][0]][v[i][j + sz][1]] = 1;
}
cur++;
}
}
return ans;
}
#include "Bordeaux.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; }
}
std::string Bordeaux(int N, int L, std::vector<std::vector<int>> T) {
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++){
int ch = 1;
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 sz = ((int)v[i].size() + 1) / 2;
for (int j = 0; j + sz <= v[i].size(); j++){
if (cur >= L) continue;
if (j + sz == v[i].size() && v[i].size() % 2 == 0) continue;
if (j + sz == v[i].size()){
T[v[i][j][0]][v[i][j][1]] ^= ch;
if (T[v[i][j][0]][v[i][j][1]] == 1) s[cur] = 'B';
cur++;
continue;
}
if (T[v[i][j][0]][v[i][j][1]] != T[v[i][j + sz][0]][v[i][j + sz][1]]){
ch = 0;
int di = abs(v[i][j][0] - x) + abs(v[i][j][1] - y);
if (di == 1){
T[v[i][j][0]][v[i][j][1]] ^= 1;
x = v[i][j][0], y = v[i][j][1];
}
else{
T[v[i][j + sz][0]][v[i][j + sz][1]] ^= 1;
x = v[i][j + sz][0], y = v[i][j + sz][1];
}
}
if (T[v[i][j][0]][v[i][j][1]] == 1) s[cur] = 'B';
cur++;
}
}
return s;
}