Submission #846288

#TimeUsernameProblemLanguageResultExecution timeMemory
846288vjudge1Bali Sculptures (APIO15_sculpture)C++17
100 / 100
110 ms600 KiB
#include<bits/stdc++.h>
using namespace std;
int n,p,q,dp[2020];
long long a[2010];
bool f[110][110];

void sub1() {
    long long ans=0;
    for (int x=63;x>=0;--x) {
        memset(f,0,sizeof(f));
        f[0][0]=1;
        long long o=ans|(1ll << x);
        for (int pos=1;pos<= q;++pos) {
            for (int i=pos;i<=n;++i)
            for (int j=i ; j>=1 ; --j) {
                long long val=a[i]-a[j-1];
                f[i][pos]|=(f[j-1][pos-1] && ((val & o) == 0));
            }
        }

        for (int pos=p;pos<=q;++pos)
        if (f[n][pos]) {
            ans = o;
            break;
        }
    }
    long long res = 0;
    for (int i=0;i<=63;++i)
        if ((ans&(1ll<<i)) == 0)
            res |= (1LL<<i);
    cout<<res;
}

void sub2() {
    long long ans=0;
    for (int x=63;x>=0;--x) {
        memset(dp,0x3f,sizeof(dp));
        dp[0] = 0;
        long long o = ans | (1ll << x);
        for (int i=1;i<=n;++i)
        for (int j=i;j>0;--j) {
            long long val=a[i]-a[j-1];
            if ((val & o) == 0) dp[i] = min(dp[i] , dp[j-1] + 1);
        }
        if (dp[n] <= q)
            ans=o;
    }
    long long res = 0;
    for (int i=0;i<=63;++i)
    if ((ans & (1LL<<i))==0)
        res|=(1ll<<i);
    cout << res;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>p>>q;
    for (int i=1;i<=n;++i)
        cin>>a[i] ,
        a[i]=a[i-1]+a[i];
    if (p != 1)
        sub1();
    else
        sub2();
}

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