Submission #20158

#TimeUsernameProblemLanguageResultExecution timeMemory
20158berasogutBali Sculptures (APIO15_sculpture)C++98
100 / 100
283 ms25300 KiB
#include<bits/stdc++.h>

using namespace std;

#define st first
#define nd second
#define mp make_pair
#define pb push_back
#define sol (root+root)
#define sag (root+root+1)
#define orta ((bas+son)/2)
#define ll long long
#define pii pair<int,int>
#define type(x) __typeof((x).begin())
#define foreach(it, x) for(type(x) it = (x).begin(); it != (x).end(); it++)

const int N=2e3+5;
const int mod=1e9+7;
const int inf=1e9+7;

int n,a,b,i,j,k;
int dp[N][N],dp2[N];
ll A[N],t,ans;

char H[2005][2005],H2[2005][2005];

int f(int x,int s){

   if(x==n+1 and s>=a and s<=b)
      return 1;

   int &r=dp[x][s];

   if(r!=-1)
      return r;

   r=0;

   for(int i=x ; i<=n ; i++)
      if(H[x][i])
         r|=f(i+1,s+1);

   return r;
}

int f2(int x){
   if(x==n+1)
      return 0;

   int &r=dp2[x];

   if(r!=-1)
      return r;

   r=2005;

   for(int i=x ; i<=n ; i++)
      if(H[x][i])
         r=min(r,f2(i+1)+1);

   return r;
}

main(){

   scanf("%d %d %d",&n,&a,&b);

   for(i=1 ; i<=n ; i++){
      scanf("%lld",A+i);
      A[i]+=A[i-1];
      for(j=i ; j<=n ; j++)
         H[i][j]=1;
   }

   for(i=40 ; i>=0 ; i--){
      memcpy(H2,H,sizeof H);
      for(j=1 ; j<=n ; j++)
         for(k=j ; k<=n ; k++)
            if(H[j][k]){
               t=A[k]-A[j-1];
               if(t&(1LL<<i))
                  H[j][k]=0;
            }

      if(a==1){
         memset(dp2,-1,sizeof dp2);
         if(f2(1)>b){
            ans+=1LL<<i;
            memcpy(H,H2,sizeof H);
         }
      }
      else {
         memset(dp,-1,sizeof dp);
         if(!f(1,0)){
            ans+=1LL<<i;
            memcpy(H,H2,sizeof H);
         }
      }
   }

   printf("%lld",ans);

}
#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...