답안 #915395

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
915395 2024-01-23T19:45:54 Z XXBabaProBerkay 건물 4 (JOI20_building4) C++17
0 / 100
1 ms 580 KB
#include <bits/stdc++.h>
using namespace std;

#define F first
#define S second

using ll = long long;

const int INF = 1e9 + 7;
const int MOD = 998244353;

int N;
map<int, map<int, int>> dp;
vector<int> A, B, ans;
vector<char> s;

bool f(int i, int a, int b)
{
	if (i == (N << 1))
	{
		if (a == b)
		{
			for (char j : s)
				cout << j;
			cout << '\n';

			return 1;
		}

		return 0;
	}

	if (dp[a][b] != 0)
		return (dp[a][b] == -1 ? 0 : 1);

	dp[a][b] = 0;
	if (i == 0 || A[i] >= ans[i - 1])
	{
		ans[i] = A[i];
		s[i] = 'A';
		dp[a][b] |= f(i + 1, a + 1, b);
	}
	if ((i == 0 || B[i] >= ans[i - 1]) && !dp[a][b])
	{
		ans[i] = B[i];
		s[i] = 'B';
		dp[a][b] |= f(i + 1, a, b + 1);
	}

	dp[a][b] = (dp[a][b] == 0 ? -1 : dp[a][b]);

	return dp[a][b] == -1 ? 0 : 1;
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	cin >> N;
	A.resize(N << 1);
	B.resize(N << 1);
	ans.resize(N << 1);
	s.resize(N << 1);
	for (int &i : A)
		cin >> i;

	for (int &i : B)
		cin >> i;

	bool res = f(0, 0, 0);
	if (!res)
		cout << -1 << '\n';
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 580 KB Output is correct
6 Incorrect 1 ms 344 KB Output isn't correct
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 580 KB Output is correct
6 Incorrect 1 ms 344 KB Output isn't correct
7 Halted 0 ms 0 KB -