Submission #1156758

#TimeUsernameProblemLanguageResultExecution timeMemory
1156758omtheprogrammer1Bali Sculptures (APIO15_sculpture)C++20
100 / 100
81 ms844 KiB
#include <bits/stdc++.h> using namespace std; #define endl "\n" #define ms(arr, v) memset(arr, v, sizeof(arr)) #define mp make_pair #define pb push_back #define fix(prec) {cout << setprecision(prec) << fixed;} #define fastio ios_base::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL); #define ins insert #define f first #define s second #define all(v) v.begin(), v.end() #define sz(v) (ll)v.size() #define readgraph(list, edges) for (ll i = 0; i < edges; i++) {ll a, b; cin >> a >> b; a--; b--; list[a].pb(b); list[b].pb(a);} typedef long long ll; typedef unsigned long long ull; typedef long double lld; typedef vector<ll> vi; typedef pair<ll, ll> pii; #define F_OR(i, a, b, s) for (ll i=(a); (s)>0?i<(b):i>(b); i+=(s)) #define F_OR1(e) F_OR(i, 0, e, 1) #define F_OR2(i, e) F_OR(i, 0, e, 1) #define F_OR3(i, b, e) F_OR(i, b, e, 1) #define F_OR4(i, b, e, s) F_OR(i, b, e, s) #define GET5(a, b, c, d, e, ...) e #define F_ORC(...) GET5(__VA_ARGS__, F_OR4, F_OR3, F_OR2, F_OR1) #define FOR(...) F_ORC(__VA_ARGS__)(__VA_ARGS__) #define EACH(x, a) for (auto& x: a) ll prexor(ll i) { i++; if ((i % 4) == 0) return 0; else if ((i % 4) == 1) return i - 1; else if ((i % 4) == 2) return 1; else return i; } ll rangexor(ll l, ll r) { if (l == 0) return prexor(r); return prexor(r)^prexor(l - 1); } ll FIRSTTRUE(function<bool(ll)> f, ll lb, ll rb) { while (lb < rb) { ll mb = (lb + rb) / 2; f(mb) ? rb = mb : lb = mb + 1; } return lb; } ll LASTTRUE(function<bool(ll)> f, ll lb, ll rb) { while (lb < rb) { ll mb = (lb + rb + 1) / 2; f(mb) ? lb = mb : rb = mb - 1; } return lb; } template<class A> void read(vector<A>& v); template<class A, size_t S> void read(array<A, S>& a); template<class T> void read(T& x) { cin >> x; } void read(double& d) { string t; read(t); d = stod(t); } void read(long double& d) { string t; read(t); d = stold(t); } template<class H, class... T> void read(H& h, T&... t) { read(h); read(t...); } template<class A> void read(vector<A>& x) { EACH(a, x) read(a); } template<class A, size_t S> void read(array<A, S>& x) { EACH(a, x) read(a); } // #define cerr cout // names mt19937 mt_rng(chrono::steady_clock::now().time_since_epoch().count()); ll randint(ll a, ll b) { return uniform_int_distribution<ll>(a, b)(mt_rng); } /*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ const lld pi = 3.14159265358979323846; const ll mod = 1000000007; // const ll mod = 998244353; // ll mod; const ll INF = 1e17; const int d4i[4] = { -1, 0, 1, 0}, d4j[4] = {0, 1, 0, -1}; const int d8i[8] = { -1, -1, 0, 1, 1, 1, 0, -1}, d8j[8] = {0, 1, 1, 1, 0, -1, -1, -1}; const int kni[8] = { +2, +2, -2, -2, 1, -1, 1, -1}, knj[8] = {1, -1, 1, -1, 2, 2, -2, -2}; ll n, m, k, q, l, r, x, y, z , h; const ll tas = 2100; ll a; ll b; ll c[tas]; ll dp[tas]; ll dp1[510][510]; ll pre[tas]; string s, t; // vector<int> vec[tas]; // vector<pii> edges[tas]; ll ans = 0; bool check(ll val) { if (a > 1) { FOR(k, 1, n + 1) FOR(n) { dp1[k][i] = 0; if (k == 1 && (pre[i] | val) == val) { dp1[k][i] = 1; } } FOR(k, 2, n + 1) FOR(n) { FOR(j, 0, i) { ll temp = pre[i] - pre[j]; if ((temp | val) == val) { { dp1[k][i] |= dp1[k - 1][j]; } } } } int ans = 0; FOR(i, a, b + 1)ans |= dp1[i][n - 1]; return ans; } else { FOR(n) { dp[i] = INF; if ((pre[i] | val) == val) { dp[i] = 1; } } FOR(i, 1, n) { FOR(j, 0, i) { ll temp = pre[i] - pre[j]; if ((temp | val) == val) { { dp[i] = min(dp[j] + 1, dp[i]); } } } } // debug(dp[8]) return dp[n - 1] <= b; } } void solve(int tc = 0) { cin >> n >> a >> b; FOR(n) cin >> c[i], pre[i] = c[i]; FOR(i, 1, n)pre[i] += pre[i - 1]; FOR(i, 45, -1, -1) { y = x | ((1ll << i) - 1); if (!check(y)) { x |= (1ll << i); } } cout << x << endl; } int main() { fastio #ifdef LOCAL auto begin = std::chrono::high_resolution_clock::now(); freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); freopen("error.txt", "w", stderr); #endif ll tc = 1; for (int t = 0; t < tc; t++) solve(t); #ifdef LOCAL auto end = std::chrono::high_resolution_clock::now(); auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin); #endif }
#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...