// Alir3za.Zar3 -> Shiraz , Iran
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int lightN = 2e3+7 , heavyN = 1e2+7;
const int Lg = 48 , Inf = 2e18;
int n,A,B , v[lightN],out;
void iN ()
{
cin >> n >> A >> B;
for (int i=1; i<=n; i++)
cin >> v[i];
for (int i=1; i<=n; i++)
v[i] += v[i-1];
}
bool Light_oK (int noT)
{
int dp[n+1];
fill_n(dp , n+1 , Inf);
dp[0] = 0;
for (int i=1; i<=n; i++)
for (int j=0; j<i; j++)
if (!( (v[i]-v[j])&noT ))
dp[i] = min(dp[i] , dp[j]+1);
return dp[n] <= B;
}
bool Heavy_oK (int noT)
{
bool dp[heavyN][heavyN];
memset(dp,false,sizeof(dp));
dp[0][0] = true;
for (int i=1; i<=n; i++)
for (int j=0; j<i; j++)
for (int k=1; k<=B; k++)
if (dp[j][k-1] and !( (v[i]-v[j])&noT ))
dp[i][k] = true;
bool mrk = false;
for (int i=A; i<=B; i++)
if (dp[n][i]) mrk = true;
return mrk;
}
void braiN ()
{
int noT = 0;
for (int bit=Lg; bit>=0; bit--)
{
noT |= 1ll<<bit;
if (A==1 and !Light_oK(noT))
noT ^= 1ll<<bit,
out ^= 1ll<<bit;
if (A>1 and !Heavy_oK(noT))
noT ^= 1ll<<bit,
out ^= 1ll<<bit;
}
}
void ouT ()
{
cout << out << '\n';
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
iN();
braiN();
ouT();
}
# | 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... |