Submission #846101

#TimeUsernameProblemLanguageResultExecution timeMemory
846101vjudge1Bali Sculptures (APIO15_sculpture)C++17
100 / 100
61 ms600 KiB

//LaziChicken - 9/2023

#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ld long double
#define pii pair <int, int>
#define pll pair <ll, ll>
#define pli pair <ll, int>
#define pil pair <int, ll>
#define fi first
#define se second
#define dim 3
#define tii tuple <int, int, int>
#define inf 0x3f

const ll nx = 2e3+2;
const ll bx = 1e3+2;
const ll mod = 1e9+7;

//--------------------------------
int n, p, q;
ll a, sum[nx];

ll range(int l, int r){
    return sum[r] - sum[l-1];
}

bool dp[102][102];
void sub4(){
    ll res = (1LL << 37) - 1;
    for (int bit = 36; bit >= 0; bit--){
        res ^= (1LL << bit);
        memset(dp, 0, sizeof(dp));
        dp[0][0] = 1;
        for (int i = 1; i <= n; i++){
            for (int k = 1; k <= q; k++){
                for (int j = 1; j <= i; j++){
                    if ((res | range(j, i)) == res){
                        dp[i][k] |= dp[j-1][k-1];
                    }
                }
            }
        }
        bool ok = 0;
        for (int i = p; i <= q; i++){
            ok |= dp[n][i];
        }
        if (!ok) res ^= (1LL << bit);
    }
    cout << res;
    exit(0);
}

int f[nx];
void sub5(){
    ll res = (1LL << 41) - 1;
    for (int bit = 40; bit >= 0; bit--){
        res ^= (1LL << bit);
        memset(f, inf, sizeof(f));
        f[0] = 0;
        for (int i = 1; i <= n; i++){
            for (int j = 1; j <= i; j++){
                if ((range(j, i) | res) == res){
                    f[i] = min(f[i], f[j-1] + 1);
                }
            }
        }
        if (f[n] > q) res ^= (1LL << bit);
    }
    cout << res;
    exit(0);
}

//--------------------------------
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin >> n >> p >> q;
    for (int i = 1; i <= n; i++){
        cin >> a;
        sum[i] = sum[i-1] + a;
    }
    if (n <= 100) sub4();
    else sub5();
}
/*
Note:

*/
#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...