Submission #211910

#TimeUsernameProblemLanguageResultExecution timeMemory
211910peijar건물 4 (JOI20_building4)C++17
100 / 100
372 ms24952 KiB
#include <bits/stdc++.h>
using namespace std;
#define SZ(x) ((int)(x).size())

typedef	long long ll;

const int INF = 1e6;

int main(void)
{
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	
	int n;
	cin >> n;

	vector<array<int, 2>> cost(2*n);

	for (int j(0); j < 2; ++j)
		for (int i(0); i < 2*n; ++i)
			cin >> cost[i][j];

	vector<array<int, 2>> lft(2*n);
	vector<array<int, 2> > rght(2*n);

	lft[2*n-1][0] = rght[2*n-1][0] = 0;
	lft[2*n-1][1] = rght[2*n-1][1] = 1;
	for (int i(2*n-2); i >= 0; --i)
	{
		for (int c(0); c < 2; ++c)
		{
			lft[i][c] = lft[i][c] = INF;
			rght[i][c] = rght[i][c] = -1;
			for (int d(0); d < 2; ++d)
				if (cost[i][c] <= cost[i+1][d] and lft[i+1][d] != INF)
				{
					lft[i][c] = min(lft[i][c], c + lft[i+1][d]);
					rght[i][c] = max(rght[i][c], c + rght[i+1][d]);
				}
		}
	}

	string colors = "AB";

	for (int start_col(0); start_col < 2; ++start_col)
	{
		if (lft[0][start_col] <= n and rght[0][start_col] >= n)
		{
			int cur_col = start_col;
			int want = n - start_col;
			for (int i(0); i < 2*n-1; ++i)
			{
				cout << colors[cur_col];
				for (int nxt_col(0); nxt_col < 2; ++nxt_col)
					if (cost[i][cur_col] <= cost[i+1][nxt_col]
						and lft[i+1][nxt_col] <= want
						and rght[i+1][nxt_col] >= want)
					{
						cur_col = nxt_col;
						want -= cur_col;
						break;
					}
			}
			cout << colors[cur_col] << endl;
			return 0;
		}
	}

	cout << -1 << endl;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...