#include <bits/stdc++.h>
#define ii pair<int, int>
#define fi first
#define se second
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
using ll = long long;
const ll mod=1e9+7;
const int nx=2e3+5;
const int LG=41;
int n, a[nx], A, B, dp[nx];
ll cur=0, base=0, pre[nx];
bool f[105][105], can[nx];
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n>>A>>B;
for(int i = 1; i <= n; i++)
cin>>a[i], pre[i]=pre[i-1]+a[i];
if(n<=100)
{
for(int i = A; i <= B; i++)
can[i]=1;
for(int bit = LG-1; bit >= 0; bit--)
{
base|=(1ll<<bit);
memset(f, 0, sizeof(f));
f[0][0]=1;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= B; j++)
{
for(int k = 0; k < i; k++)
{
if(!f[k][j-1]) continue;
ll tmp=(pre[i]-pre[k])&base;
if((tmp&cur)==tmp)
f[i][j]=1;
}
}
}
bool ok=0;
for(int i = A; i <= B; i++)
if(f[n][i] && can[i]) ok=1;
if(ok)
{
for(int i = A; i <= B; i++)
if(!f[n][i]) can[i]=0;
}
else cur|=(1ll<<bit);
}
return cout<<cur, 0;
}
for(int i = A; i <= B; i++)
can[i]=1;
for(int bit = LG-1; bit >= 0; bit--)
{
base|=(1ll<<bit);
memset(dp, 0x3f, sizeof(dp));
dp[0]=0;
for(int i = 1; i <= n; i++)
{
for(int j = 0; j < i; j++)
{
ll tmp=(pre[i]-pre[j])&base;
if((tmp&cur)==tmp)
dp[i]=min(dp[i], dp[j]+1);
}
}
if(dp[n]>B) cur|=(1ll<<bit);
}
cout<<cur;
}
| # | 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... |