제출 #15813

#제출 시각아이디문제언어결과실행 시간메모리
15813jihoonBali Sculptures (APIO15_sculpture)C++98
100 / 100
151 ms1112 KiB
#include<cstdio>
long long int sum[2002];
int dp[2002][2];
int main(){
	long long int dap,gap=1,im,ddd;
	int n,a,b,c1,c2;
	for(int i=1;i<=41;i++){
		gap*=2;
	}
	scanf("%d%d%d",&n,&a,&b);
	sum[0]=0;
	for(int i=1;i<=n;i++){
		scanf("%lld",&im);
		sum[i]=sum[i-1]+im;
	}
	dap=gap;
	ddd=gap;
	dp[0][0]=0;
	dp[0][1]=0;
	while(gap>0){
		for(int i=1;i<=n;i++){
			dp[i][0]=n+2;dp[i][1]=-1;
		}
		for(int i=1;i<=n;i++){
			for(int j=0;j<i;j++){
				if(dp[j][1]==-1) continue;
				im=sum[i]-sum[j];
				if(im<=dap&&((im & ddd)==0)){
					if(dp[i][0]>dp[j][0]+1) dp[i][0]=dp[j][0]+1;
					if(dp[i][1]<dp[j][1]+1) dp[i][1]=dp[j][1]+1; 
				}
			}
		}
		c1=a;c2=b;
		if(c1<dp[n][0]) c1=dp[n][0];
		if(c2>dp[n][1]) c2=dp[n][1];
		gap/=2;
		ddd+=gap;
		if(a<=c1&&c1<=c2&&c2<=b){
			dap-=gap;
			if(gap==0) dap--;
		}else{
			ddd-=(gap*2);
			dap+=gap;
		}
	}
	printf("%lld",dap);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...