Submission #497699

#TimeUsernameProblemLanguageResultExecution timeMemory
497699SaacootaBali Sculptures (APIO15_sculpture)C++14
100 / 100
81 ms448 KiB
#include <bits/stdc++.h> #define fo(i,a,b) for(int i=(a);i<=(b);++i) #define fd(i,a,b) for(int i=(a);i>=(b);--i) #define rep(i,a,b) for(int i=(a);i<(b);++i) #define fi first #define se second #define LL unsigned long long #define uint unsigned int #define pb push_back #define eb emplace_back #define bit(s,i) ((s >> i) & 1ll) #define off(s,i) (s & (~ (1 << i))) #define ii pair <LL , LL> #define iii1 pair <ii , int> #define iii2 pair <int , ii> #define TASK "OR" using namespace std; const long long inf = 0x3f3f3f3f3f3f3f3f; const int oo = 0x3f; int n , p , q , a[2010] , dp[2020]; long long s[2010]; bool f[110][110]; ///-------------------------- void readf() { cin >> n >> p >> q; for (int i = 1 ; i <= n ; ++i) cin >> a[i] , s[i] = s[i-1] + a[i]; } ///-------------------------- void solve1() { long long ans = 0; for (int x = 40 ; x >= 0 ; --x) { memset(f,false,sizeof(f)); f[0][0] = 1; long long o = ans | (1ll << x); for (int tp = 1 ; tp <= q ; ++tp) { for (int i = tp ; i <= n ; ++i) for (int j = i ; j >= 1 ; --j) { long long val = s[i] - s[j-1]; f[i][tp] |= (f[j-1][tp-1] && ((val & o) == 0)); } } for (int tp = p ; tp <= q ; ++tp) if (f[n][tp]) { ans = o; break; } } long long res = 0; for (int i = 0 ; i <= 40 ; ++i) if (bit(ans,i) == 0) res |= (1ll << i); cout << res; } ///-------------------------- void solve2() { long long ans = 0; for (int x = 40 ; x >= 0 ; --x) { memset(dp,0x3f,sizeof(dp)); dp[0] = 0; long long o = ans | (1ll << x); for (int i = 1 ; i <= n ; ++i) for (int j = i ; j > 0 ; --j) { long long val = s[i] - s[j-1]; if ((val & o) == 0) dp[i] = min(dp[i] , dp[j-1] + 1); } if (dp[n] <= q) ans = o; } long long res = 0; for (int i = 0 ; i <= 40 ; ++i) if (bit(ans,i) == 0) res |= (1ll << i); cout << res; } ///-------------------------- int main() { ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); readf(); if (p != 1) solve1(); else solve2(); }
#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...