【PAT甲级 - C++题解】1125 Chain the Ropes

news/2025/2/21 13:01:26/

✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
📚专栏地址:PAT题解集合
📝原题地址:题目详情 - 1125 Chain the Ropes (pintia.cn)
🔑中文翻译:结绳
📣专栏定位:为想考甲级PAT的小伙伴整理常考算法题解,祝大家都能取得满分!
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

1125 Chain the Ropes

Given some segments of rope, you are supposed to chain them into one rope. Each time you may only fold two segments into loops and chain them into one piece, as shown by the figure. The resulting chain will be treated as another segment of rope and can be folded again. After each chaining, the lengths of the original two segments will be halved.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mq2Q6ol2-1671843374397)(PAT 甲级辅导.assets/46293e57-aa0e-414b-b5c3-7c4b2d5201e2.jpg)]

Your job is to make the longest possible rope out of N given segments.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (2≤N≤104). Then N positive integer lengths of the segments are given in the next line, separated by spaces. All the integers are no more than 104.

Output Specification:

For each case, print in a line the length of the longest possible rope that can be made by the given segments. The result must be rounded to the nearest integer that is no greater than the maximum length.

Sample Input:

8
10 15 12 3 4 13 1 15

Sample Output:

14

题意

给定 n 个绳子的长度,每两个绳子合并长度就会减少一半,需要求出所有绳子合并后长度的最大值,输出的是整数(向下取整)。

思路

绳子合并的顺序不同会导致最终的结果不同,例如有三根绳子 {1,2,3} ,如果想让前两个合并再和第三根合并,最终的绳子长度为 ((1+2)/2+3)/2=2.25 ;而如果先让第一根和第三根合并再和第二根合并,最终的绳子长度为 ((1+3)/2+2)/2=2

直接上结论,这其实有一点像哈夫曼树但又不完全相似,我们每次合并都去合并最小的那两根绳子,这样最后得到的长度一定是最大的。

代码

#include<bits/stdc++.h>
using namespace std;const int N = 10010;
double a[N];
int n;int main()
{cin >> n;for (int i = 0; i < n; i++)    cin >> a[i];//进行排序sort(a, a + n);//计算最大长度并输出for (int i = 1; i < n; i++)    a[0] = (a[0] + a[i]) / 2;cout << (int)a[0] << endl;return 0;
}

http://www.ppmy.cn/news/6383.html

相关文章

Nature:剑桥大学的研究人员找到了终结新冠的新药了吗?

本月初&#xff08;即2022年12月5日&#xff09;&#xff0c;《Nature》杂志发布了剑桥大学Teresa Brevini等人的一篇关于新冠研究的论文。在该论文中&#xff0c;作者首先发现法尼酯 X 受体&#xff08;FXR&#xff09;能够直接调节人体的ACE2的表达。过去的研究已经表明&…

世界杯已开赛,哪些看球设备让你觉得身临其境?

笔者在父亲的影响下&#xff0c;从1994年美国世界杯开始接触足球&#xff0c;因为当时 CCTV5 对拥有着小世界杯之称的意甲转播&#xff0c;成为了一名意大利足球队的忠实拥趸&#xff0c;一直到现在。 四年一次的世界杯也成了我从不错过的足球盛宴。2002年日韩世界杯和2006年德…

**(双星/星号)和*(星号/星号)对参数有什么作用?

问&#xff1a; *args 和 **kwargs 是什么意思&#xff1f; def foo(x, y, *args): def bar(x, y, **kwargs):答1: huntsbot.com高效搞钱&#xff0c;一站式跟进超10任务平台外包需求 *args 和 **kwargs 是一种常见的习惯用法&#xff0c;允许函数使用任意数量的参数&#xf…

spice-gtk音频播放完整流程笔记

1、获取SpiceAudio句柄&#xff0c;也就是音频播放和录音类对象1.1、在主通道中获取SpiceAudio句柄1.1.1、在channel-main.c的main_agent_handle_msg函数中能力协商&#xff08;VD_AGENT_ANNOUNCE_CAPABILITIES&#xff09;时调用agent同步音频播放获取SpiceAudio句柄/* corout…

C++运算符重载

定义&#xff1a;运算符重载是对已有的运算符赋予多重含义&#xff0c;使得同一个运算符作用于不同类型的数据时导致不同的行为。 实质&#xff1a;运算符重载就是函数重载。在实现过程中&#xff0c;首先把指定的运算表达式转化为对运算符函数的调用&#xff0c;运算对象转化…

什么是勒索病毒?有哪些危害?如何预防?

勒索病毒是泛指一切通过锁定被感染者计算机系统或文件并施以敲诈勒索的新型计算机病毒&#xff0c;通过计算机漏洞、邮件投递、恶意木马程序、网页后门等方式进行传播&#xff0c;一旦感染&#xff0c;磁盘上几乎所有格式的文件都会被加密&#xff0c;造成企业、学校和个人用户…

操作符(8)

目录 1、算术操作符 2、移位操作符 3、位操作符 1、不能创建临时变量&#xff08;第三个变量&#xff09;&#xff0c;实现两个数的交换 4、赋值操作符 5、单目操作符 6、关系操作符 7、逻辑操作符 8、条件操作符 9、逗号表达式 10、下标引用、函数调用和结构成员 …

Android -- 每日一问:如何设计一个照片上传 app ?

经典回答 把自己放在一个面试官的角度&#xff0c;自己先实现一次这个 App &#xff0c;然后自己总结一下你在这次实现中需要哪些能力、需要注意哪些事项。最后&#xff0c;再回过头来看&#xff0c;如果你是面试官&#xff0c;你希望面试者怎么回答才算是符合你的标准的&…