이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll PW = 43;
const int N = 2010;
const int oo = 2e9;
int f[N][N], a[N], n, A, B, ff[N];
ll res, bad;
bool ok(){
for (int i = 0; i <= n; i++)
for (int j = 0; j <= B; j++)
f[i][j] = 0;
f[0][0] = 1;
for (int j = 1; j <= B; j++)
for (int i = 1; i <= n; i++) {
if (!f[i - 1][j - 1]) continue;
ll sum = 0;
for (int ii = i; ii <= n; ii++){
sum += a[ii];
if ((sum & bad) == 0)
f[ii][j] = 1;
}
}
for (int j = A; j <= B; j++)
if (f[n][j])
return 1;
return 0;
}
bool kok(){
for (int i = 0; i <= n; i++)
ff[i] = oo;
ff[0] = 0;
for (int i = 1; i <= n; i++) {
if (ff[i - 1] == oo) continue;
ll sum = 0;
for (int ii = i; ii <= n; ii++){
sum += a[ii];
if ((sum & bad) == 0)
ff[ii] = min(ff[ii], ff[i - 1] + 1);
}
}
return (ff[n] <= B);
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0);
// freopen("in.txt","r",stdin);
cin >> n >> A >> B;
for (int i = 1; i <= n; i++)
cin >> a[i];
res = (1ll << PW) - 1;
for (ll po = PW - 1; po >= 0; po--) {
bad ^= (1ll << po);
if (A == 1){
if (kok())
res ^= (1ll << po);
else bad ^= (1ll << po);
} else {
if (ok())
res ^= (1ll << po);
else bad ^= (1ll << po);
}
}
cout << res;
return 0;
}
# | 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... |