Submission #253273

#TimeUsernameProblemLanguageResultExecution timeMemory
253273LawlietBuilding 4 (JOI20_building4)C++17
100 / 100
487 ms36728 KiB
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1000010;
const int INF = 1000000010;

int n;

int v[MAXN][2];
int dp[MAXN][2];

void solveDP(int p)
{
	for(int i = 2*n ; i > 0 ; i--)
	{
		for(int j = 0 ; j < 2 ; j++)
		{
			dp[i][j] = -INF;

			for(int nxt = 0 ; nxt < 2 ; nxt++)
			{
				int curValue = dp[i + 1][nxt];
				if( nxt == p ) curValue++;

				if( v[i - 1][j] <= v[i][nxt] )
					dp[i][j] = max( dp[i][j] , curValue );
			}
		}
	}
}

int main()
{
	scanf("%d",&n);

	for(int k = 0 ; k < 2 ; k++)
		for(int i = 1 ; i <= 2*n ; i++)
			scanf("%d",&v[i][k]);

	for(int k = 1 ; k >= 0 ; k--)
	{
		solveDP( k );

		if( dp[1][0] < n )
		{
			printf("-1\n");
			return 0;
		}
	}

	int last = 0;
	int remainA = n;

	for(int i = 1 ; i <= 2*n ; i++)
	{
		if( dp[i + 1][1] >= remainA && v[i][1] >= last )
		{
			printf("B");
			last = v[i][1];
		}
		else
		{
			printf("A");

			remainA--;
			last = v[i][0];
		}
	}
}

Compilation message (stderr)

building4.cpp: In function 'int main()':
building4.cpp:35:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&n);
  ~~~~~^~~~~~~~~
building4.cpp:39:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%d",&v[i][k]);
    ~~~~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...