Submission #883395

#TimeUsernameProblemLanguageResultExecution timeMemory
883395SalihSahinBali Sculptures (APIO15_sculpture)C++14
100 / 100
782 ms776 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, vector<int>&pre, int alma, int preans){ // bu biti almamaya calisiyoruz invalid olan bitleri de almadan basarirsak (valid |= (1 << alma), alma--) vector<int> dpmn(n+1, inf); dpmn[0] = 0; for(int i = 0; i < n; i++){ 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; dpmn[k] = min(dpmn[k], dpmn[i] + 1); } } vector<int> dpmx(n+1, 0); dpmn[0] = 0; for(int i = 0; i < n; i++){ 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; dpmx[k] = max(dpmx[k], dpmx[i] + 1); } } bool ok = (dpmx[n] >= a && dpmn[n] <= b); 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), pre(n+1); for(int i = 0; i < n; i++){ cin>>arr[i]; pre[i+1] = pre[i] + arr[i]; } int ans = 0; for(int i = 60; i >= 0; i--){ if(!f(n, a, b, arr, pre, 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...