이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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... |