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


题目描述

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

给定N段绳子的长度,你需要找出它们能串成的绳子的最大长度。


输入格式:

每个输入包含 1个测试用例。每个测试用例第1 行给出正整数N (2≤N≤10^4);第 2 行给出 N个正整数,即原始绳段的长度,数字间以空格分隔。所有整数都不超过10^4


输出格式:

在一行中输出能够串成的绳子的最大长度。结果向下取整,即取为不超过最大长度的最近整数。


输入样例:

8
10 15 12 3 4 13 1 15

输出样例:

14

解题思路:

刚看到这一题的时候,就想到了数学里面的一个不等式的性质,两个数列的乘积问题正序和 > 乱序和 > 逆序和

这里我们首先分析一下,题目意思就是两根身子连成一根绳子时,两根身子的长度均减半。

有 n 根绳子,意味着我们需要打 n - 1 次结,第1次打结,第一第二根绳子减半成新绳子1,第二次打结,新绳子1和第三根减半形成新绳子2 , 其实就是 第一根绳子和第二根绳子减半两次,第三根绳子减半一次 , 依次类推 …

最后的绳子其实就是,第一根和第二根减半 n - 1 次,第二根绳子减半 n - 2 次,第三根绳子 减半 n - 3 次 … 第

n 根绳子减半 1 次!其实就变成了 一个这样的问题,给你两个数列,数列 A 是输入的每段绳子的长度,数列 B 是 {1/2n-1 , 1/2n-1 ,1/2n-2 , … , 1/2 },就变成了我一开始所说的问题,求两个数列的乘积问题!

为了在实际操作中更好的实现,我们不如将 数列 B 的第一项变为 2/2n-1 . 然后就能用如下的代码解决求和问题了。(这可能是 PAT 甲级里最简单的 25 分题啦)

ans = num[0] ; // 对第一项特殊处理一下
for(int i = 0 ; i < n ; i++){ans = (ans + num[i]) / 2 ;
}

完整代码:

#include<bits/stdc++.h>
using namespace std ;
double num[10010] ;
int main(){int n ;double ans = 0.0 ;cin>> n ;for(int i = 0 ; i < n ; i ++) cin >> num[i] ;sort(num,num+n) ; ans = num[0] ; for(int i = 0 ; i < n ; i++) ans = (ans + num[i]) / 2 ; cout<<(int)ans<<endl ;// 向下取整,可以直接用 double 转 intreturn 0 ;
}
  • 原题链接 PAT (Basic Level) Practice (中文)1070 结绳 (25 分)

  • PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) 凌宸1642

  • PAT (Basic Level) Practice (中文)1055 集体照 (25 分) 凌宸1642

PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642相关推荐

  1. PAT (Advanced Level) Practice 1011 World Cup Betting (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1011 World Cup Betting (20 分) 凌宸1642 题目描述: With the 2010 FIFA World Cu ...

  2. C++学习之路 | PTA乙级—— 1070 结绳 (25 分)(精简)

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

  3. PAT (Advanced Level) Practice 1043 Is It a Binary Search Tree (25 分) 凌宸1642

    PAT (Advanced Level) Practice 1043 Is It a Binary Search Tree (25 分) 凌宸1642 题目描述: A Binary Search Tr ...

  4. 1070 结绳 (25 分)(这该死的测试点)

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

  5. PTA平台 · PAT(Basic Level) Practice(中文) 题目集

    前  言 ※  PTA是 程序设计类实验辅助教学平台 ,里边包含一些编程题目集以供练习. ※  PAT是 浙江大学计算机程序设计能力考试(Programming Ability Test),分为乙级( ...

  6. 【PAT乙级】1070 结绳 (25 分)

    题目地址 #include<cstdio> #include<iostream> #include<algorithm> using namespace std; ...

  7. 【最详细解析】1070 结绳 (25分)_18行代码AC

    立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的 ...

  8. 1070 结绳 (25 分)

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

  9. 1070 结绳 (25 分) (C++)

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

最新文章

  1. 【深度学习】讲一个深度分离卷积结构和空洞卷积的应用
  2. NLPIR智能语义:大数据精准挖掘是信息化发展趋势
  3. Redis 缓存常见问题:缓存一致性的解决方案
  4. C# 约瑟夫环 用数组实现
  5. 单片机检测220V交流电通断电路
  6. 摘得“2019最佳智能手机”大奖的华为P30系列究竟比iPhone XS系列强在哪
  7. 【MySQL】mysql查看库 表占用存储空间大小
  8. Hadoop、spark、Flink、Blink、storm介绍
  9. 重新学习操作系统的知识
  10. spring MVC interceptor post遇到问题
  11. mysql读写分离优点_mysql读写分离
  12. dedecms教程:龙书浩最新DedeCmsV5.7建站仿站VIP视频教程免费下载
  13. 各大型网站架构分析收集
  14. Ceres 曲线拟合
  15. [求助]python模拟布丰投针
  16. 法宝合成时的五行位置分配是什么
  17. 计算机在信息处理中的作品用,计算机信息处理技术在办公自动化中的运用
  18. java中Scanner,Randon,ArrayList
  19. windows 10 移动热点无互联网连接
  20. 将ES6的语法转为ES5(为了兼容 ES5) (Babel)

热门文章

  1. web上渐进使用jQuery Mobile中animate相关CSS
  2. Java中通过正则表达式判断是否为合法的url地址
  3. 游戏开发中的人工智能(一):游戏人工智能简介
  4. 施密特正交化_机器学习 线性代数基础 | 3.3施密特正交化:寻找最佳投影基
  5. 如何正确的写加减乘除函数
  6. 阿里巴巴Java开发命名规范
  7. Linux 中改变主机名的 4 种方法
  8. Entity Framework — ( Database First )
  9. Maven 多profile及指定编译问题
  10. 数据库建模-ERWIN