Submission #14393

#TimeUsernameProblemLanguageResultExecution timeMemory
14393gs14004Bali Sculptures (APIO15_sculpture)C++14
100 / 100
198 ms1116 KiB
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long lint;

int n,s,e;
lint a[2005];

char dp[101][101];
lint criteria;

int f(int pos, int grp){
    if(pos == 0) return grp <= e && grp >= s;
    if(~dp[pos][grp]) return dp[pos][grp];
    int t = 0;
    for(int j=pos-1; j>=0; j--){
        if(((~criteria) & (a[pos] - a[j])) == 0){
            t |= f(j,grp+1);
            if(t == 1) break;
        }
    }
    return dp[pos][grp] = t;
}

int dp2[2001];

int f2(int x){
    if(x == 0) return 0;
    if(~dp2[x]) return dp2[x];
    int ret = 1e9;
    for(int j=x-1; j>=0; j--){
        if(((~criteria) & (a[x] - a[j])) == 0){
            ret = min(ret,f2(j) + 1);
        }
    }
    return dp2[x] = ret;
}

void solve2(){
    criteria = (1ll << 50) - 1;
    for(int i=49; i>=0; i--){
        criteria ^= (1ll<<i);
        memset(dp,-1,sizeof(dp));
        if(!f(n,0)){
            criteria ^= (1ll<<i);
        }
    }
    printf("%lld",criteria);
}

void solve3(){
    criteria = (1ll << 50) - 1;
    for(int i=49; i>=0; i--){
        criteria ^= (1ll<<i);
        memset(dp2,-1,sizeof(dp2));
        if(f2(n) > e){
            criteria ^= (1ll<<i);
        }		
    }
    printf("%lld",criteria);
}

int main(){
    scanf("%d %d %d",&n,&s,&e);
    for(int i=1; i<=n; i++){
        scanf("%lld",&a[i]);
        a[i] += a[i-1];
    }
    if(s != 1){
        solve2();
    }
    else{
        solve3();
    }
    puts("");
}
#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...