#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll bitsize = 29;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
ll n, a, b;
cin >> n >> a >> b;
ll year[n+5];
for(ll i = 1; i <= n; i++){
cin >> year[i];
}
if(a == 1){
ll sumyear[n+5][n+5];
for(ll l = 1; l <= n; ++l){
ll sumnow = 0;
for(ll r = l; r <= n; ++r){
sumnow += year[r];
sumyear[l][r] = sumnow;
}
}
ll ans = 0;
for(ll digit = bitsize; digit >= 0; digit--){
//test if the i th digit in ans can be 0
ll dp[n+5];
dp[0] = 0;
for(ll i = 1; i <= n; i++) dp[i] = 1e18;
for(ll i = 0; i <= n; i++){
for(ll j = i+1; j <= n; j++){
bool pass = 1;
ll thissum = sumyear[i+1][j];
//cout << i+1 << " " << j << " " << thissum << "\n";
for(ll k = digit+1; k <= bitsize; k++){
//if(digit == 3) cout << i << " " << j << " " << k << " : " << thissum << " " << (thissum>>k&1) << " " << (ans>>k&1) << "\n";
if(((thissum>>k&1) == 1) && ((ans>>k&1) == 0)){
//cout << " lsd lf\n";
pass = 0;
}
}
if(thissum>>digit&1 == 1){
pass = 0;
}
if(pass){
//cout << digit << " : " << i << " " << j << "\n";
dp[j] = min(dp[j], dp[i]+1);
}
}
}
if(dp[n] > b){
ans += 1<<digit;
}
/*cout << "digit = " << digit << " : ";
for(ll i = 0; i <= n; i++){
cout << dp[i] << " ";
}
cout << "\n";
cout << "test : ";
for(ll i = 18; i >= 0; i--){
cout << (17>>i&1);
}
cout << "\n";*/
}
cout << ans;
}
else{
ll sumyear[n+5][n+5];
for(ll l = 1; l <= n; ++l){
ll sumnow = 0;
for(ll r = l; r <= n; ++r){
sumnow += year[r];
sumyear[l][r] = sumnow;
}
}
ll ans = 0;
for(ll digit = bitsize; digit >= 0; digit--){
//test if the i th digit in ans can be 0
ll dp[n+5][n+5];
for(ll i = 0; i <= n; i++) for(ll j = 0; j <= n; j++) dp[i][j] = 1e18;
dp[0][0] = 0;
for(ll i = 0; i <= n; i++){
for(ll j = i+1; j <= n; j++){
bool pass = 1;
ll thissum = sumyear[i+1][j];
for(ll k = digit+1; k <= bitsize; k++){
if(((thissum>>k&1) == 1) && ((ans>>k&1) == 0)){
pass = 0;
}
}
if(thissum>>digit&1 == 1){
pass = 0;
}
if(pass){
//cout << digit << " : " << i << " " << j << "\n";
for(ll k = 0; k < n; k++) dp[j][k+1] = min(dp[j][k+1], dp[i][k]);
}
}
}
for(ll k = a; k <= b; k++){
if(dp[n][k] != 0){
//cout << digit << " " << k << "\n";
ans += (1<<digit);
break;
}
}
}
cout << ans;
}
}
/*
6 1 1
8 1 2 1 5 4
8 1 75 1 3
2 2 4 8 16 32 64 1
*/
# | 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... |