题目

给定⼀段⼀段的绳⼦,你需要把它们串成⼀条绳。每次串连的时候,是把两段绳⼦对折,再如下图所示套接在⼀起。这样得到的绳⼦⼜被当成是另⼀段绳⼦,可以再次对折去跟另⼀段绳⼦串连。每次串

连后,原来两段绳⼦的⻓度就会减半。

给定N段绳⼦的⻓度,你需要找出它们能串成的绳⼦的最⼤⻓度。

输⼊格式:

每个输⼊包含1个测试⽤例。每个测试⽤例第1⾏给出正整数N (2<=N<=10^4);第2⾏给出N个正整数,即原始绳段的⻓度,数字间以空格分隔。所有整数都不超过104。

输出格式:

在⼀⾏中输出能够串成的绳⼦的最⼤⻓度。结果向下取整,即取为不超过最⼤⻓度的最近整数。

输⼊样例:

8

10 15 12 3 4 13 1 15

输出样例:

14

题目分析

已知一系列线段,两两衔接长度折半,求所有线段组成最长绳子的长度

解题思路

  1. 贪心算法:取当前最短的两个线段衔接,长度折半会最小
  2. 对所有线段长度进行升序排序
  3. 依次取两个线段进行衔接

易错点

  1. 长度累加变量,不能初始化为0,因为arr[0]要和arr[1]结合折叠,而不是0和arr[0]折叠

Code

Code 01

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int main(int argc,char *argv[]) {
int N;
scanf("%d",&N);
int arr[N]={0};
for(int i=0; i<N; i++) {
scanf("%d", &arr[i]);
}
sort(arr,arr+N);
// double L=0.0; //不能从0开始,因为arr[0]要和arr[1]结合折叠,而不是0和arr[0]折叠
double L=arr[0];
for(int i=0; i<N; i++) {
L=(L+arr[i])/2.0;
}
printf("%d",(int)floor(L));
return 0;
}

PAT Basic 1070 结绳(25) [排序,贪⼼]的更多相关文章

  1. PAT Basic 1070 结绳 (25 分)

    给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连.每次串连后,原来两段绳子的长度 ...

  2. PAT 乙级 1070 结绳(25) C++版

    1070. 结绳(25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一段一段的绳子,你需要把它们串成一条 ...

  3. PAT乙级-1070. 结绳(25)

    给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连.每次串连后,原来两段绳子的长度 ...

  4. PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642 题目描述 给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下 ...

  5. PAT乙级:1070 结绳 (25分)

    PAT乙级:1070 结绳 (25分) 题干 给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子,可以再次对折去跟 ...

  6. PAT(B) 1070 结绳(Java)

    题目链接:1070 结绳 (25 point(s)) 题目描述 给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子 ...

  7. PAT (Basic Level) Practice (中文)1070 结绳 (25 分) (优先队列)

    给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连.每次串连后,原来两段绳子的长度 ...

  8. PAT 1070. 结绳(25)

    给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连.每次串连后,原来两段绳子的长度 ...

  9. 1070 结绳 (25 分)C语言

    给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连.每次串连后,原来两段绳子的长度 ...

随机推荐

  1. 二十一、JavaScript之访问对象属性

    一.代码如下 二.执行效果如下 <!DOCTYPE html> <html> <meta http-equiv="Content-Type" cont ...

  2. poj 3262 Protecting the Flowers 贪心 牛吃花

    Protecting the Flowers Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11402   Accepted ...

  3. 【LeetCode】组合总和

    [问题]给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字可以无限制 ...

  4. C++ STD Gems05

    find.find_if.find_first_of.mismatch.search.adjacent_find #include <iostream> #include <vect ...

  5. JS隔行换色和全选的实现

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. PowerDesigner 破解版,汉化包!

    链接:https://pan.baidu.com/s/1R_6g6keo2Y4_V0c1ImeFbA  密码:ncju

  7. soupui--替换整个case的url

    添加新的URL 随便进入一个case的[REST]step,添加新的url 更换URL 添加完之后双击想要更换url的case,在弹出的窗口中点击URL按钮 在弹出的set endpoint窗口中选择 ...

  8. bzoj4316小C的独立集(dfs树/仙人掌+DP)

    本题有两种写法,dfs树上DP和仙人掌DP. 先考虑dfs树DP. 什么是dfs树?其实是对于一棵仙人掌,dfs后形成生成树,找出非树边(即返祖边),然后dfs后每条返祖边+其所覆盖的链构成了一个环( ...

  9. SeetaFaceQt:写一个简单的界面

    关于这个界面,我用到了几个控件,这些控件通过Qt是非常容易构建的,窗口的话用的是QWidget,之前说了,QWidget是Qt里面几乎大部分控件的父类,QWidget的布局我使用了简单的水平布局(QH ...

  10. Spring中@Value("${}"))取不到值的几种情况

    https://blog.csdn.net/dh12313012/article/details/84661169 1. spring组件重写构造方法,在构造方法中引用@Value为null 由于sp ...