제출 #211501

#제출 시각아이디문제언어결과실행 시간메모리
211501PajarajaBuilding 4 (JOI20_building4)C++17
100 / 100
425 ms27780 KiB
#include <bits/stdc++.h>
#define MAXN 500007
using namespace std;
int mn[2][2*MAXN],mx[2][2*MAXN],a[2][2*MAXN];
bool mz[2][2*MAXN];
char rc[2*MAXN];
void reconstruct(int k,int ind,int val)
{
	rc[ind]='A'+k;
	if(!ind) return;
	for(int t=0;t<2;t++) if(a[t][ind-1]<=a[k][ind] && mn[t][ind-1]<=val-k && mx[t][ind-1]>=val-k) {reconstruct(t,ind-1,val-k); return;}
}
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=0;i<2*n;i++) scanf("%d",&a[0][i]);
	for(int i=0;i<2*n;i++) scanf("%d",&a[1][i]);
	mz[0][0]=mz[1][0]=true;
	mn[0][0]=mx[0][0]=0;
	mn[1][0]=mx[1][0]=1;
	for(int i=1;i<2*n;i++) mn[0][i]=mn[1][i]=2*n+12;
	for(int i=1;i<2*n;i++) for(int j=0;j<2;j++) for(int k=0;k<2;k++) if(a[k][i-1]<=a[j][i] && mz[k][i-1]) 
	{
		mz[j][i]=true; 
		mn[j][i]=min(mn[j][i],mn[k][i-1]+j);
		mx[j][i]=max(mx[j][i],mx[k][i-1]+j);
	}
	for(int t=0;t<2;t++) if(mn[t][2*n-1]<=n && mx[t][2*n-1]>=n && mz[t][2*n-1])
	{
		reconstruct(t,2*n-1,n);
		for(int i=0;i<2*n;i++) printf("%c",rc[i]);
		return 0;
	}
	printf("-1");
}

컴파일 시 표준 에러 (stderr) 메시지

building4.cpp: In function 'int main()':
building4.cpp:16:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&n);
  ~~~~~^~~~~~~~~
building4.cpp:17:30: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i=0;i<2*n;i++) scanf("%d",&a[0][i]);
                         ~~~~~^~~~~~~~~~~~~~~
building4.cpp:18:30: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i=0;i<2*n;i++) scanf("%d",&a[1][i]);
                         ~~~~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...