This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |