Submission #107694

#TimeUsernameProblemLanguageResultExecution timeMemory
107694oolimryBali Sculptures (APIO15_sculpture)C++14
71 / 100
1063 ms896 KiB
#include <bits/stdc++.h> using namespace std; long long target = 0ll; ///1's at that bit means that we want to keep that bit with a value of 0 int main() { //freopen("i.txt","r",stdin); ios_base::sync_with_stdio(false); cin.tie(0); int n, a, b; cin >> n >> a >> b; long long arr[n]; for(int i = 0;i < n;i++){ cin >> arr[i]; } long long all = (1ll << 51) - 1; for(int i =1;i < n;i++){ arr[i] += arr[i-1]; } bool dp[n][b]; for(long long bit = 50;bit >= 0;bit--){ ///check if we can keep that value at 0 target ^= (1ll << bit); for(int i = 0;i < n;i++){ for(int k = 0;k < b;k++){ dp[i][k] = false; } } for(int i = 0;i < n;i++){ ///end for(int k = 0;k < b;k++){ ///no. of groups; if(k == 0){ if((arr[i] & target) == 0){ dp[i][k] = true; } continue; } for(int j = 0;j < i;j++){ ///choosing where to break of the previous group long long presum = arr[i]; presum -= arr[j]; if(((presum & target) == 0) && dp[j][k-1]){ dp[i][k] = true; break; } } } } bool can = false; for(int k = a-1;k < b;k++){ if(dp[n-1][k]){ can = true; break; } } if(!can){ target ^= (1ll << bit); //cout << target << "\n"; } } cout << (target ^ all) << "\n"; 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...