Submission #1253433

#TimeUsernameProblemLanguageResultExecution timeMemory
1253433hoa208Bali Sculptures (APIO15_sculpture)C++20
0 / 100
1096 ms328 KiB
#include <iostream> #include <vector> #include <climits> using namespace std; int n, A, B; vector<int> Y; vector<int> prefix_sum; int min_beauty = INT_MAX; // Hàm tính tổng từ chỉ số l đến r (0-indexed) int get_sum(int l, int r) { return prefix_sum[r + 1] - prefix_sum[l]; } // Hàm đệ quy để chia mảng thành groups_left nhóm liên tiếp void dfs(int pos, int groups_left, vector<int>& group_sums) { if (groups_left == 1) { if (pos >= n) return; // không đủ phần tử int total = get_sum(pos, n - 1); int or_val = 0; for (int sum : group_sums) or_val |= sum; or_val |= total; min_beauty = min(min_beauty, or_val); return; } for (int i = pos; i <= n - groups_left; ++i) { int total = get_sum(pos, i); group_sums.push_back(total); dfs(i + 1, groups_left - 1, group_sums); group_sums.pop_back(); } } int main() { // Nhập đầu vào cin >> n >> A >> B; Y.resize(n); prefix_sum.resize(n + 1, 0); for (int i = 0; i < n; ++i) { cin >> Y[i]; prefix_sum[i + 1] = prefix_sum[i] + Y[i]; } // Duyệt số nhóm từ A đến B for (int x = A; x <= B; ++x) { vector<int> group_sums; dfs(0, x, group_sums); } cout << min_beauty << endl; return 0; }
#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...