Submission #961819

#TimeUsernameProblemLanguageResultExecution timeMemory
961819vjudge1Bali Sculptures (APIO15_sculpture)C++14
37 / 100
6 ms604 KiB
#include<bits/stdc++.h>

using namespace std;

const int _N=2010;
int a[_N], n, l, r, pf[_N];

namespace sub5{
   const int N=2010;
   bool adj[N][N];
   int f[N];
   bool check(int msk){
      for (int i=0; i<=n; ++i) for (int j=i+1; j<=n; ++j) adj[i][j]=((pf[j]-pf[i])&msk)==0;
      memset(f, 0x3f, sizeof f);
      f[0]=0;
      for (int i=0; i<n; ++i) for (int j=i+1; j<=n; ++j) if (adj[i][j]){
         f[j]=min(f[j], f[i]+1);
      }
      return f[n]<=r;
   }
   void solve(){
      int msk=(1<<30)-1;
      for (int i=29; i>=0; --i){
         if (check((1<<30)-1-(msk^(1<<i)))) msk^=1<<i;
      }
      cout << msk << '\n';
   }
}

namespace sub4{
   const int N=110;
   bool adj[N][N];
   bool f[N][N];
   bool check(int msk){
      for (int i=0; i<=n; ++i) for (int j=i+1; j<=n; ++j) adj[i][j]=((pf[j]-pf[i])&msk)==0;
      memset(f, 0, sizeof f);
      f[0][0]=1;
      for (int i=0; i<n; ++i) for (int j=i+1; j<=n; ++j) if (adj[i][j]){
         for (int k=0; k<n; ++k) f[j][k+1]|=f[i][k];
      }
      return *max_element(f[n]+l, f[n]+r+1);
   }
   void solve(){
      int msk=(1<<30)-1;
      for (int i=29; i>=0; --i){
         if (check((1<<30)-1-(msk^(1<<i)))) msk^=1<<i;
      }
      cout << msk << '\n';
   }
}

int32_t main(){
   ios_base::sync_with_stdio(false);
   cin.tie(nullptr);
   cin >> n >> l >> r;
   for (int i=1; i<=n; ++i) cin >> a[i];
   partial_sum(a, a+n+1, pf);
   if (n<=100) sub4::solve();
   else sub5::solve();
   return 0;
}
#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...