Submission #249658

#TimeUsernameProblemLanguageResultExecution timeMemory
249658receedBali Sculptures (APIO15_sculpture)C++14
71 / 100
235 ms780 KiB
#include <iostream> #include <iomanip> #include <cstdio> #include <vector> #include <algorithm> #include <cmath> #include <cstring> #include <cassert> #include <string> #include <set> #include <map> #include <random> #include <bitset> #include <string> #include <unordered_set> #include <unordered_map> #include <deque> #include <queue> #define rep(i, n) for (int i = 0; i < (n); i++) #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() using namespace std; using ll = long long; using ul = unsigned long long; using ld = long double; const int N = 1001; int dp[N][N], d2[N]; ll ps[N]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); ll n, a, b; cin >> n >> a >> b; rep(i, n) { cin >> ps[i + 1]; ps[i + 1] += ps[i]; } ll ans = 0; if (a > 1) for (int i = 41; i >= 0; i--) { ans += (1ll << i) - 1; rep(j, b + 1) rep(k, n + 1) dp[j][k] = 0; dp[0][0] = 1; rep(j, b) rep(k, n) rep(l, k + 1) { ll x = ps[k + 1] - ps[l]; if (dp[j][l] && (ans & x) == x) { dp[j + 1][k + 1] = 1; break; } } int f = 0; for (int j = a; j <= b; j++) if (dp[j][n]) f = 1; ans -= (1ll << i) - 1; if (!f) ans += (1ll << i); } else for (int i = 41; i >= 0; i--) { ans += (1ll << i) - 1; rep(j, n) d2[j + 1] = n + 1; rep(k, n) rep(l, k + 1) { ll x = ps[k + 1] - ps[l]; if ((ans & x) == x) d2[k + 1] = min(d2[k + 1], d2[l] + 1); } ans -= (1ll << i) - 1; if (d2[n] > b) ans += (1ll << i); } cout << ans; }
#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...