Submission #883382

#TimeUsernameProblemLanguageResultExecution timeMemory
883382SalihSahinBali Sculptures (APIO15_sculpture)C++14
71 / 100
1082 ms3100 KiB
#include<bits/stdc++.h>
#define pb push_back
#define int long long
#define mp make_pair
 
using namespace std;
const int inf = 1e18;
const int mod = 1e9 + 7;
const int N = 1e5 + 5;

vector<int> f2(65);

int bf(int n, int a, int b, vector<int> &arr){
    int ans = inf;
    
    for(int j = 1; j < (1 << n); j += 2){
        int g = 0, val = 0, sum = 0;
        for(int i = 0; i < n; i++){
            if(j & (1 << i)){
                val |= sum;
                sum = 0;
                g++;
            }
            sum += arr[i];
        }
        val |= sum;
        if(g >= a && g <= b){
            if(val > ans) continue;
            ans = min(ans, val);
        }
    }

    return ans;
}

int f(int n, int a, int b, vector<int> &arr, int alma, int preans){ // bu biti almamaya calisiyoruz invalid olan bitleri de almadan basarirsak (valid |= (1 << alma), alma--)
    vector<vector<int> > dp(n+1, vector<int>(n+1, 0));
    vector<int> pre(n+1);
    for(int i = 1; i <= n; i++){
        pre[i] = pre[i-1] + arr[i-1];
    }
    dp[0][0] = 1;

    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            for(int k = i + 1; k <= n; k++){
                if((pre[k] - pre[i]) & f2[alma]) continue;
                if(((pre[k] - pre[i])|preans) > f2[alma] + preans) continue;
                dp[k][j+1] |= dp[i][j];
            }
        }
    }

    bool ok = 0;
    for(int i = a; i <= b; i++){
        ok |= dp[n][i];
    }

    return ok;
}


int32_t main(){
    ios_base::sync_with_stdio(false), cin.tie();
    f2[0] = 1;
    for(int i = 1; i <= 60; i++){
        f2[i] = f2[i-1] * 2;
    }

    int n, a, b;
    cin>>n>>a>>b;
    vector<int> arr(n);
    for(int i = 0; i < n; i++){
        cin>>arr[i];
    }
    int ans = 0;
    for(int i = 60; i >= 0; i--){
        if(!f(n, a, b, arr, i, ans)){
            ans += f2[i];
        }
    }

    cout<<ans<<endl;
    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...