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