Submission #130016

#TimeUsernameProblemLanguageResultExecution timeMemory
130016kostia244Bali Sculptures (APIO15_sculpture)C++14
71 / 100
32 ms632 KiB
#pragma GCC optimize ("Ofast") #include<bits/stdc++.h> #define pb push_back #define __V vector #define all(x) x.begin(), x.end() #define oit ostream_iterator #define mod M using namespace std; void doin() { cin.tie(); cout.tie(); ios::sync_with_stdio(0); #ifndef ONLINE_JUDGE // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); #endif } template<typename X, typename Y> istream& operator>>(istream& in, pair<X, Y> &a) { in >> a.first >> a.second; return in; } template<typename T> void getv(T& i) { cin >> i; } template<typename T, typename ... Ns> void getv(vector<T>& v, int n, Ns ... ns) { v.resize(n); for (auto& i : v) getv(i, ns...); } template<typename T> void getv1(T& i) { cin >> i; } template<typename T, typename ... Ns> void getv1(vector<T>& v, int n, Ns ... ns) { v.resize(n + 1); for (int i = 1; i <= n; i++) getv(v[i], ns...); } #ifdef _WIN32 #define getchar_unlocked() _getchar_nolock() #define _CRT_DISABLE_PERFCRIT_LOCKS #endif inline void getch(char &x) { while (x = getchar_unlocked(), x < 33) { ; } } inline void getstr(string &str) { str.clear(); char cur; while (cur = getchar_unlocked(), cur < 33) { ; } while (cur > 32) { str += cur; cur = getchar_unlocked(); } } template<typename T> inline bool sc(T &num) { bool neg = 0; int c; num = 0; while (c = getchar_unlocked(), c < 33) { if (c == EOF) return false; } if (c == '-') { neg = 1; c = getchar_unlocked(); } for (; c > 47; c = getchar_unlocked()) num = num * 10 + c - 48; if (neg) num *= -1; return true; } typedef unsigned long long ull; typedef long long ll; typedef float ld; typedef ll _I; typedef pair<_I, _I> pi; typedef pair<ld, ld> pd; typedef map<_I, _I> mii; typedef __V <_I> vi; typedef __V <char> vc; typedef __V <ld> vd; typedef __V <vd> vvd; typedef __V <pi> vpi; typedef __V <__V<_I>> vvi; typedef __V <__V<char>> vvc; typedef __V <__V<pi>> vvpi; using AntonTsypko = void; using arsijo = AntonTsypko; using god = arsijo; uniform_real_distribution<double> double_dist(0, 1); mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int n, A, B, dp[101][101]; vi a, pref; ll ans = (1ll << 61) - 1; int can(int i = 0, int cuts = 0) { if(cuts > B) return 0; if (i == n) return cuts >= A; if (dp[i][cuts] != -1) return dp[i][cuts]; int& res = dp[i][cuts]; res = 0; for (int j = i + 1; j <= n; j++) { ll sum = pref[j - 1] - (i ? pref[i - 1] : 0); if ((ans | sum) != ans) continue; res |= can(j, cuts+1); } return res; } int main() { doin(); cin >> n >> A >> B; getv(a, n); pref.resize(n); pref[0] = a[0]; for (int i = 1; i < n; i++) pref[i] = a[i] + pref[i - 1]; for (int i = 60; i >= 0; i--) { memset(dp, -1, sizeof(dp)); ans -= (1ll << i); if (!can()) 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...