제출 #952591

#제출 시각아이디문제언어결과실행 시간메모리
952591UnforgettableplBali Sculptures (APIO15_sculpture)C++17
71 / 100
162 ms724 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

bool DP[101][101];
int DPmin[2001];
int arr[101];
int a,b,n;

bool testany(int k){
    for(auto&i:DP)for(auto&j:i)j=false;
    DP[0][0]=true;
    for(int j=1;j<=b;j++){
        for(int i=j;i<=n;i++){
            int sum = arr[i];
            for(int x=i-1;x>=j-1;x--){
                if((sum|k) == k and DP[x][j-1]){DP[i][j]=true;break;}
                sum+=arr[x];
            }
        }
    }
    for(int i=a;i<=b;i++)if(DP[n][i])return true;
    return false;
}

bool test1(int k){
    for(int&i:DPmin)i=1e17;
    DPmin[0]=0;
    for(int i=1;i<=n;i++){
        int sum = arr[i];
        for(int j=i-1;j>=0;j--){
            if((sum|k)==k)DPmin[i]=min(DPmin[i],DPmin[j]+1);
            sum+=arr[j];
        }
    }
    return DPmin[n]<=b;
}

bool test(int k){
    return n<=100 ? testany(k) : test1(k);
}

bool check(int x){
    bool works = test(x);
    for(int bit=36;bit;bit--)if(x&(1ll<<bit))works = works or test((x^(1ll<<bit))|((1ll<<bit)-1ll));
    return works;
}

mt19937 RNG(123443);

void tester(){
    int l,t;
    cin >> n >> t;a=1;l=100*n;
    while(t--){
        for(int i=1;i<=n;i++)arr[i]= RNG()%100;
        b = (RNG()%n)+1;
        int k = RNG()%l;
        if(testany(k)!= test1(k)){
            for(int j=1;j<=n;j++)cout<<arr[j]<<' ';
            cout << '\n' << k << '\n';
            exit(0);
        }
    }
}


int32_t main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    // Stress test
//    tester();
//    return 0;
    // Stress test
    cin >> n >> a >> b;
    for(int i=1;i<=n;i++)cin>>arr[i];
    int ans = -1;
    for(int jump = 68719476736ll;jump;jump/=2){
        if(!check(jump+ans))ans+=jump;
    }
    cout << ans+1 << '\n';
}
#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...