Submission #741921

#TimeUsernameProblemLanguageResultExecution timeMemory
741921irmuunBali Sculptures (APIO15_sculpture)C++17
100 / 100
129 ms464 KiB
#include<bits/stdc++.h>

using namespace std;

#define pb push_back
#define ll long long
#define ff first
#define ss second
#define all(s) s.begin(),s.end()

int n,a,b;
ll y[2005];

bool check1(ll mask){
    bool dp[105][105];
    memset(dp,false,sizeof(dp));
    dp[0][0]=true;
    for(int j=0;j<=n;j++){
        for(int i=0;i<n;i++){
            if(dp[i][j]==true){
                ll cur=0;
                for(int k=i+1;k<=n;k++){
                    cur+=y[k];
                    if((cur&mask)==0){
                        dp[k][j+1]=true;
                    }
                }    
            }
        }
    }
    for(int i=a;i<=b;i++){
        if(dp[n][i]==true){
            return true;
        }
    }
    return false;
}
bool check2(ll mask){
    int dp[2005];
    for(int i=0;i<=n;i++){
        dp[i]=100000;
    }
    dp[0]=0;
    for(int i=0;i<n;i++){
        if(dp[i]<100000){
            ll cur=0;
            for(int j=i+1;j<=n;j++){
                cur+=y[j];
                if((cur&mask)==0){
                    dp[j]=min(dp[j],dp[i]+1);
                }
            }
        }
    }
    return (dp[n]<=b);
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    cin>>n>>a>>b;
    for(int i=1;i<=n;i++){
        cin>>y[i];
    }
    if(n<=100){
        ll cur=0;
        for(ll i=60;i>=0;i--){
            if(check1(cur+(1ll<<i))==true){
                cur+=(1ll<<i);
            }
        }
        cout<<(1ll<<61)-1-cur;
    }
    else{
        ll cur=0;
        for(ll i=60;i>=0;i--){
            if(check2(cur+(1ll<<i))==true){
                cur+=(1ll<<i);
            }
        }
        cout<<(1ll<<61)-1-cur;
    }
}
#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...