답안 #379305

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
379305 2021-03-17T23:58:32 Z eulerdesoja 건물 4 (JOI20_building4) C++14
100 / 100
362 ms 103788 KB
#include<bits/stdc++.h>
#include<fstream>
using namespace std;

#define ll long long
#define pb push_back
#define sz(x) int(x.size())

typedef pair<int,int>ii;
typedef vector<int> vi;

//we try to guess how many A's we will use on the building
//aparently (need to prove) the possibilities are contiguous
//i just need to find the minimum and maximum possible and check if n it is in it

const int mxn=1e6+5;
int n,a[2][mxn];
int dpmin[mxn][2],dpmax[mxn][2];
int smin(int i,int last){
	if(i==0)return 0;
	if(dpmin[i][last]!=-1)return dpmin[i][last];

	int ans=1e9+5;

	for(int j=0;j<2;j++){
		if(a[j][i]<=a[last][i+1])ans=min(ans,smin(i-1,j)+j);
	}

	return dpmin[i][last]=ans;
}

int smax(int i,int last){
	if(i==0)return 0;
	if(dpmax[i][last]!=-1)return dpmax[i][last];

	int ans=0;
	for(int j=0;j<2;j++){
		if(a[j][i]<=a[last][i+1])ans=max(ans,smax(i-1,j)+j);
	}
	return dpmax[i][last]=ans;
}
int32_t main(){
	ios_base::sync_with_stdio(0);cin.tie(0);
	cin>>n;n*=2;

	for(int i=1;i<=n;i++)cin>>a[0][i];
	for(int i=1;i<=n;i++)cin>>a[1][i];
	a[0][n+1]=a[1][n+1]=1e9+5;
	
	memset(dpmin,-1,sizeof(dpmin));
	memset(dpmax,-1,sizeof(dpmax));

	int x=n/2,y=n/2,last=0;

	string s;
	for(int i=n;i>=1;i--){
		if(smin(i,last)<=y && y<=smax(i,last)){
			int mn=smin(i-1,0),mx=smax(i-1,0);
			if(mn<=y && y<=mx && x && a[0][i]<=a[last][i+1]){
				x--;
				s+='A';
				last=0;
			}
			else{
				y--;
				s+='B';
				last=1;
			}
		}
		else{
			cout<<-1<<"\n";
			return 0;
		}
	}
	reverse(s.begin(),s.end());
	if(x || y)cout<<-1<<"\n";
	else cout<<s<<"\n";

	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 15980 KB Output is correct
2 Correct 9 ms 16000 KB Output is correct
3 Correct 9 ms 15980 KB Output is correct
4 Correct 9 ms 15980 KB Output is correct
5 Correct 12 ms 16108 KB Output is correct
6 Correct 12 ms 16364 KB Output is correct
7 Correct 10 ms 16236 KB Output is correct
8 Correct 10 ms 16364 KB Output is correct
9 Correct 12 ms 16364 KB Output is correct
10 Correct 12 ms 16236 KB Output is correct
11 Correct 11 ms 16364 KB Output is correct
12 Correct 10 ms 16364 KB Output is correct
13 Correct 10 ms 16364 KB Output is correct
14 Correct 10 ms 16384 KB Output is correct
15 Correct 10 ms 16364 KB Output is correct
16 Correct 10 ms 16364 KB Output is correct
17 Correct 11 ms 16364 KB Output is correct
18 Correct 10 ms 16364 KB Output is correct
19 Correct 10 ms 16364 KB Output is correct
20 Correct 10 ms 16364 KB Output is correct
21 Correct 10 ms 16364 KB Output is correct
22 Correct 10 ms 16364 KB Output is correct
23 Correct 10 ms 16364 KB Output is correct
24 Correct 11 ms 16620 KB Output is correct
25 Correct 10 ms 16364 KB Output is correct
26 Correct 10 ms 16364 KB Output is correct
27 Correct 12 ms 16364 KB Output is correct
28 Correct 10 ms 16236 KB Output is correct
29 Correct 11 ms 16364 KB Output is correct
30 Correct 10 ms 16384 KB Output is correct
31 Correct 10 ms 16364 KB Output is correct
32 Correct 10 ms 16236 KB Output is correct
33 Correct 10 ms 16364 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 15980 KB Output is correct
2 Correct 9 ms 16000 KB Output is correct
3 Correct 9 ms 15980 KB Output is correct
4 Correct 9 ms 15980 KB Output is correct
5 Correct 12 ms 16108 KB Output is correct
6 Correct 12 ms 16364 KB Output is correct
7 Correct 10 ms 16236 KB Output is correct
8 Correct 10 ms 16364 KB Output is correct
9 Correct 12 ms 16364 KB Output is correct
10 Correct 12 ms 16236 KB Output is correct
11 Correct 11 ms 16364 KB Output is correct
12 Correct 10 ms 16364 KB Output is correct
13 Correct 10 ms 16364 KB Output is correct
14 Correct 10 ms 16384 KB Output is correct
15 Correct 10 ms 16364 KB Output is correct
16 Correct 10 ms 16364 KB Output is correct
17 Correct 11 ms 16364 KB Output is correct
18 Correct 10 ms 16364 KB Output is correct
19 Correct 10 ms 16364 KB Output is correct
20 Correct 10 ms 16364 KB Output is correct
21 Correct 10 ms 16364 KB Output is correct
22 Correct 10 ms 16364 KB Output is correct
23 Correct 10 ms 16364 KB Output is correct
24 Correct 11 ms 16620 KB Output is correct
25 Correct 10 ms 16364 KB Output is correct
26 Correct 10 ms 16364 KB Output is correct
27 Correct 12 ms 16364 KB Output is correct
28 Correct 10 ms 16236 KB Output is correct
29 Correct 11 ms 16364 KB Output is correct
30 Correct 10 ms 16384 KB Output is correct
31 Correct 10 ms 16364 KB Output is correct
32 Correct 10 ms 16236 KB Output is correct
33 Correct 10 ms 16364 KB Output is correct
34 Correct 240 ms 23788 KB Output is correct
35 Correct 341 ms 93112 KB Output is correct
36 Correct 354 ms 98880 KB Output is correct
37 Correct 339 ms 90788 KB Output is correct
38 Correct 331 ms 93092 KB Output is correct
39 Correct 322 ms 100996 KB Output is correct
40 Correct 344 ms 90048 KB Output is correct
41 Correct 319 ms 101156 KB Output is correct
42 Correct 346 ms 88312 KB Output is correct
43 Correct 362 ms 90464 KB Output is correct
44 Correct 353 ms 90632 KB Output is correct
45 Correct 357 ms 90464 KB Output is correct
46 Correct 334 ms 90464 KB Output is correct
47 Correct 340 ms 90464 KB Output is correct
48 Correct 337 ms 90760 KB Output is correct
49 Correct 347 ms 90464 KB Output is correct
50 Correct 361 ms 90788 KB Output is correct
51 Correct 351 ms 90464 KB Output is correct
52 Correct 292 ms 96224 KB Output is correct
53 Correct 298 ms 96148 KB Output is correct
54 Correct 268 ms 96352 KB Output is correct
55 Correct 270 ms 96096 KB Output is correct
56 Correct 335 ms 90464 KB Output is correct
57 Correct 308 ms 102752 KB Output is correct
58 Correct 310 ms 103164 KB Output is correct
59 Correct 361 ms 103196 KB Output is correct
60 Correct 288 ms 98212 KB Output is correct
61 Correct 301 ms 103732 KB Output is correct
62 Correct 302 ms 102396 KB Output is correct
63 Correct 301 ms 103636 KB Output is correct
64 Correct 290 ms 100688 KB Output is correct
65 Correct 318 ms 103788 KB Output is correct