
特发热体吴青峰因特网菲亚特无法瓦特放大是的哇跨越u额范围公寓房额u付服务特勤服也王启发特扶人为峰
关注引自免费微信小程序:皆我百晓生
为了解决这个问题,我们可以按照以下步骤进行:
n 和要选取的花朵数量 k,以及每朵花的美丽值 b1, b2, ..., bn。以下是C++代码实现:
#include <iostream>
#include <vector>
#include <algorithm>
int getHarmony(int a[], int k, int pos) {
// 计算左右两边数组长度
int left = (pos + 1) / 2;
int right = k - left;
// 计算左侧最大值和右侧最小值
int max_left = a[pos];
for (int i = pos - 1; i >= pos - left && i >= 0; --i) {
max_left = std::max(max_left, a[i]);
}
int min_right = a[pos];
for (int i = pos + 1; i <= pos + right && i < k; ++i) {
min_right = std::min(min_right, a[i]);
}
return max_left - min_right;
}
int main() {
int n, k;
std::cin >> n >> k;
std::vector<int> beauty(n);
for (int i = 0; i < n; ++i) {
std::cin >> beauty[i];
}
std::sort(beauty.begin(), beauty.end());
int min_harmony = INT_MAX;
for (int pos = 0; pos < k; ++pos) {
if ((pos == k - 1 || pos == 0) && k % 2 == 0) continue; // 如果k为偶数且pos为边界,则跳过,因为中位数不唯一
min_harmony = std::min(min_harmony, getHarmony(beauty.data(), k, pos));
}
std::cout << min_harmony << std::endl;
return 0;
}
这段代码首先读取输入,然后对花朵的美丽值进行排序。接下来,它遍历所有可能的中位数位置,计算每个位置上的不和谐度,并更新最小不和谐度。注意,当k为偶数时,中位数有两个,我们只需要考虑其中一个位置(这里我们只处理位于中间的那朵花)。最后,程序会输出最小的不和谐度。