# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
25493 | gabrielsimoes | Bali Sculptures (APIO15_sculpture) | C++14 | 149 ms | 9864 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef signed char sc;
typedef long long ll;
const int MAXN = 2001;
const sc MINLOG = -1;
const sc MAXLOG = 44;
#define most(a) (63 - __builtin_clzll(a))
#define sum(i, j) (v[j] - v[i-1])
int N, A, B;
ll v[MAXN];
ll x;
sc cost(int i, int j) {
ll a = sum(i,j)&~x;
if (a != 0) return most(a);
else return MINLOG;
}
bool ok[MAXN][MAXN];
sc dp[MAXN][MAXN];
sc f(int i, int g) {
if (i > N)
return (g < A | g > B)?MAXLOG:MINLOG;
if (ok[i][g]) return dp[i][g];
ok[i][g] = 1;
dp[i][g] = MAXLOG;
for (int j = i; j <= N; j++)
dp[i][g] = min(dp[i][g], max(cost(i, j), f(j+1, g+1)));
return dp[i][g];
}
bool oka1[MAXN];
int dpa1[MAXN];
int fa1(int i) {
if (i > N) return 0;
if (oka1[i]) return dpa1[i];
oka1[i] = 1;
dpa1[i] = MAXN;
for (int j = i; j <= N; j++)
if ((sum(i,j)|x) == x)
dpa1[i] = min(dpa1[i], 1 + fa1(j+1));
return dpa1[i];
}
int main()
{
scanf("%d %d %d", &N, &A, &B);
for (int i = 1; i <= N; i++)
scanf("%d", &x), v[i] = v[i-1] + x;
if (A != 1) {
sc lim = most(v[N]) + 1;
x = 0;
while (lim > 0) {
memset(ok, 0, sizeof(ok));
lim = f(1,0);
if (lim != MINLOG)
x |= (1LL << lim);
}
} else {
sc lim = most(v[N]) + 1;
x = (1LL << lim) - 1;
for (int i = lim-1; i >= 0; i--) {
memset(oka1, 0, sizeof(oka1));
x ^= (1LL << i);
if (fa1(1) > B)
x ^= (1LL << i);
}
}
printf("%lld\n", x);
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |