Submission #170556

#TimeUsernameProblemLanguageResultExecution timeMemory
170556VEGAnnBali Sculptures (APIO15_sculpture)C++14
100 / 100
89 ms760 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll PW = 43;
const int N = 2010;
const int oo = 2e9;
int f[N][N], a[N], n, A, B, ff[N];
ll res, bad;

bool ok(){
    for (int i = 0; i <= n; i++)
        for (int j = 0; j <= B; j++)
            f[i][j] = 0;
    f[0][0] = 1;
    for (int j = 1; j <= B; j++)
        for (int i = 1; i <= n; i++) {
            if (!f[i - 1][j - 1]) continue;
            ll sum = 0;
            for (int ii = i; ii <= n; ii++){
                sum += a[ii];
                if ((sum & bad) == 0)
                    f[ii][j] = 1;
            }
        }
    for (int j = A; j <= B; j++)
        if (f[n][j])
            return 1;
    return 0;
}

bool kok(){
    for (int i = 0; i <= n; i++)
        ff[i] = oo;
    ff[0] = 0;
    for (int i = 1; i <= n; i++) {
        if (ff[i - 1] == oo) continue;
        ll sum = 0;
        for (int ii = i; ii <= n; ii++){
            sum += a[ii];
            if ((sum & bad) == 0)
                ff[ii] = min(ff[ii], ff[i - 1] + 1);
        }
    }
    return (ff[n] <= B);
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
//    freopen("in.txt","r",stdin);
    cin >> n >> A >> B;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    res = (1ll << PW) - 1;
    for (ll po = PW - 1; po >= 0; po--) {
        bad ^= (1ll << po);
        if (A == 1){
            if (kok())
                res ^= (1ll << po);
            else bad ^= (1ll << po);
        } else {
            if (ok())
                res ^= (1ll << po);
            else bad ^= (1ll << po);
        }
    }
    cout << res;
    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...