特发热体吴青峰因特网菲亚特无法瓦特放大是的哇跨越u额范围公寓房额u付服务特勤服也王启发特扶人为峰
5条回答 默认 最新
关注
引自免费微信小程序:皆我百晓生
为了解决这个问题,我们可以按照以下步骤进行:
- 读入数据:包括花的数量
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
为偶数时,中位数有两个,我们只需要考虑其中一个位置(这里我们只处理位于中间的那朵花)。最后,程序会输出最小的不和谐度。解决 无用评论 打赏 举报 编辑记录- 读入数据:包括花的数量
悬赏问题
- ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
- ¥15 怎么看我在bios每次修改的日志
- ¥15 python+mysql图书管理系统
- ¥15 Questasim Error: (vcom-13)
- ¥15 船舶旋回实验matlab
- ¥30 SQL 数组,游标,递归覆盖原值
- ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
- ¥20 gitlab 中文路径,无法下载
- ¥15 用动态规划算法均分纸牌
- ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据