#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
int N, A, B;
ll Y[2005];
ll prefix_sum[2005];
// Subtask 4 uchun: A va B cheklovi bilan tekshirish
bool check_with_AB(ll current_ans) {
bool dp[105][105] = {false};
dp[0][0] = true;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= i; j++) {
for (int k = 0; k < i; k++) {
ll sum = prefix_sum[i] - prefix_sum[k];
// Agar sum joriy "ans" maskasiga mos kelsa
if (dp[k][j - 1] && ((sum | current_ans) == current_ans)) {
dp[i][j] = true;
}
}
}
}
for (int j = A; j <= B; j++) {
if (dp[N][j]) return true;
}
return false;
}
// Subtask 5 uchun: Faqat B cheklovi (A=1) bilan tekshirish
bool check_with_B(ll current_ans) {
int dp[2005]; // dp[i] - minimal guruhlar soni
fill(dp, dp + 2005, N + 1);
dp[0] = 0;
for (int i = 1; i <= N; i++) {
for (int k = 0; k < i; k++) {
ll sum = prefix_sum[i] - prefix_sum[k];
if ((sum | current_ans) == current_ans) {
dp[i] = min(dp[i], dp[k] + 1);
}
}
}
return dp[N] <= B;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> N >> A >> B;
for (int i = 1; i <= N; i++) {
cin >> Y[i];
prefix_sum[i] = prefix_sum[i - 1] + Y[i];
}
ll ans = (1LL << 62) - 1; // Barcha bitlar 1 dan boshlanadi
// Eng yuqori bitdan (61) boshlab pastga qarab harakat qilamiz
for (int bit = 61; bit >= 0; bit--) {
ll temp_ans = ans ^ (1LL << bit); // Ushbu bitni 0 qilib ko'ramiz
bool possible;
if (A == 1) possible = check_with_B(temp_ans);
else possible = check_with_AB(temp_ans);
if (possible) {
ans = temp_ans; // Agar bitni 0 qilish iloji bo'lsa, natijani yangilaymiz
}
}
cout << ans << endl;
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... |