Submission #979457

#TimeUsernameProblemLanguageResultExecution timeMemory
979457happy_node건물 4 (JOI20_building4)C++17
100 / 100
209 ms45388 KiB
#include <bits/stdc++.h>
using namespace std;

const int MX=1e6+5;

int N;
int A[MX][2], L[MX][2], R[MX][2];

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

	int N;
	cin>>N;
	for(int i=0;i<2*N;i++) cin>>A[i][0];
	for(int i=0;i<2*N;i++) cin>>A[i][1];

	L[0][0]=0;
	R[0][0]=0;
	L[0][1]=1;
	R[0][1]=1;

	for(int i=1;i<2*N;i++) {
		for(int j=0;j<2;j++) {
			L[i][j]=1e9;
			R[i][j]=0;
		}
	}

	for(int i=1;i<2*N;i++) {
		for(int j=0;j<2;j++) {
			for(int k=0;k<2;k++) {
				if(A[i-1][k]<=A[i][j]) {
					L[i][j]=min(L[i][j],L[i-1][k]+j);
					R[i][j]=max(R[i][j],R[i-1][k]+j);
				}
			}
		}
	}

	if(L[2*N-1][0]<=N && N<=R[2*N-1][0]) {
		string ans="";
		ans+='A';
		int cur=N, prv=A[2*N-1][0];
		for(int i=2*N-2;i>=0;i--) {
			if(L[i][0]<=cur && cur<=R[i][0] && A[i][0]<=prv) {
				ans+='A';
				prv=A[i][0];
			} else {
				cur-=1;
				ans+='B';
				prv=A[i][1];
			}
		}
		reverse(ans.begin(),ans.end());
		cout<<ans<<'\n';
	} else if(L[2*N-1][1]<=N && N<=R[2*N-1][1]) {
		string ans="";
		ans+='B';
		int cur=N-1, prv=A[2*N-1][1];
		for(int i=2*N-2;i>=0;i--) {
			if(L[i][0]<=cur && cur<=R[i][0] && A[i][0]<=prv) {
				ans+='A';
				prv=A[i][0];
			} else {
				cur-=1;
				ans+='B';
				prv=A[i][1];
			}
		}
		reverse(ans.begin(),ans.end());
		cout<<ans<<'\n';
	} else {
		cout<<-1<<'\n';
	}

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