Submission #23423

#TimeUsernameProblemLanguageResultExecution timeMemory
23423duongthoi1999Bali Sculptures (APIO15_sculpture)C++14
0 / 100
6 ms33616 KiB
#include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=n-1;i>=a;i--) #define pb push_back #define all(x) (x).begin(),(x).end() #define fi first #define se second #define SZ(x) ((int)(x).size()) typedef long long ll; typedef long double ld; typedef pair<int, int> ii; const int mod = (int) 1e9 + 7; const ll inf = 1LL << 60; const int maxn = (int) 2e3 + 5; const ld eps = 1e-9; int n, a, b, y[maxn], g[maxn]; ll f[maxn][maxn], s[maxn]; void solve1() { rep(i, 0, maxn) rep(j, 0, maxn) f[i][j] = inf; f[0][0] = 0; rep(i, 1, n + 1) { rep(k, 1, i + 1) { rep(j, 0, i) { f[i][k] = min(f[i][k], f[j][k - 1] | (s[i] - s[j])); } } } ll res = inf; rep(i, a, b + 1) res = min(res, f[n][i]); cout << res << '\n'; } void solve2() { ll res = 0; per(x, 0, 50) { rep(i, 1, n + 1) g[i] = mod; rep(i, 1, n + 1) { rep(j, 0, i) { ll val = s[i] - s[j]; if((val | res) < res + (1LL << x)) g[i] = min(g[i], g[j] + 1); //if(i == n) cout << "? " << val << endl; } } //cout << g[n] << endl; if(g[n] > b) res |= (1LL << x); } cout << res << '\n'; } int main() { //freopen("test.txt", "r", stdin); ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> a >> b; rep(i, 1, n + 1) cin >> y[i], s[i] = s[i - 1] + y[i]; solve1(); return 0; if(n <= 100) 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...