Submission #1347288

#TimeUsernameProblemLanguageResultExecution timeMemory
1347288penguin133Casino (JOI26_casino)C++20
100 / 100
243 ms844 KiB
#include "Azzurro.h"
#include <bits/stdc++.h>
using namespace std;

std::vector<std::vector<int>> Azzurro(int N, int L, std::string S) {
    std::vector<std::vector<int>> x(N, std::vector<int>(N, 0));
    int cnt = 0;
    while (S.length() < 51) S += 'A';
    for (int i = 0; i < N + N - 1; i++) {
		if (i == 0 || i == N + N - 2) {
			x[i/2][i/2] = (S[cnt] == 'B' ? 1 : 0);
			cnt++;
			continue;
		}
		int cnt1 = 0;
		for (int j = max(0, i - N + 1); j <= min(N - 1, i); j++) {
			if (j < min(N - 1, i)) {
				x[j][i - j] = (S[cnt] == 'B' ? 0 : 1);
				cnt++;
			}
			else {
				for (int k = j - 2; k >= max(0, i - N + 1); k -= 2) cnt1 ^= x[k][i - k];
				x[j][i - j] = cnt1;
			}
		}
	}
	return x;
}
#include "Bordeaux.h"
#include <bits/stdc++.h>
using namespace std;

std::string Bordeaux(int N, int L, std::vector<std::vector<int>> T) {
    std::string s(L, 'A');
    int r = 0, c = 0;
    s[0] = (T[0][0] == 0 ? 'B' : 'A');
    vector < vector <int> > v(N, vector <int> (N, 0));
    int cnt = 1;
    for (int i = 1; i < N + N - 1; i++) {
		if (cnt == L) return s;
		if (i == 0 || i == N + N - 2) {
			s[cnt] = (T[i/2][i/2] == 1 ? 'A' : 'B');
			cnt++;
			continue;
		}
		int cnt1 = 0;
		for (int j = min(N - 1, i); j >= max(0, i - N + 1); j -= 2) {
			cnt1 ^= T[j][i - j];
		}
		if (cnt1) {
			int t = min(N - 1, i);
			if ((t + r) % 2) {
				r++;
				v[r][c] = 1;
			}
			else {
				c++;
				v[r][c] = 1;
			}
		}
		else {
			int t = min(N - 1, i);
			if ((t + r) % 2 == 0) {
				r++;
				v[r][c] = 1;
			}
			else {
				c++;
				v[r][c] = 1;
			}
		}
		for (int j = max(0, i - N + 1); j < min(N - 1, i); j++) {
			s[cnt] = (T[j][i - j] ^ v[j][i - j] ? 'A' : 'B');
			cnt++;
			if (cnt == L) return s;
		}
	}
	return s;
}
#Verdict Execution timeMemoryGrader output
Fetching results...