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 转 int
return 0 ;
}

PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642的更多相关文章

  1. PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642 题目描述: People in Mars represent the c ...

  2. PAT (Advanced Level) Practice 1019 General Palindromic Number (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1019 General Palindromic Number (20 分) 凌宸1642 题目描述: A number that will ...

  3. 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 ...

  4. PAT (Advanced Level) Practice 1005 Spell It Right (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1005 Spell It Right (20 分) 凌宸1642 题目描述: Given a non-negative integer N ...

  5. PAT (Advanced Level) Practice 1001 A+B Format (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1001 A+B Format (20 分) 凌宸1642 题目描述: Calculate a+b and output the sum i ...

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

    PAT (Basic Level) Practice (中文)1055 集体照 (25 分) 凌宸1642 题目描述: 拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每 ...

  7. PAT (Basic Level) Practice (中文)1065 单身狗 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1065 单身狗 (25 分) 凌宸1642 题目描述: "单身狗"是中文对于单身人士的一种爱称.本题请你从上万人的大 ...

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

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

  9. PAT (Advanced Level) Practice 1006 Sign In and Sign Out (25 分) 凌宸1642

    PAT (Advanced Level) Practice 1006 Sign In and Sign Out (25 分) 凌宸1642 题目描述: At the beginning of ever ...

随机推荐

  1. css picture

    css picture https://github.com/cyanharlow https://diana-adrianne.com/ demo https://github.com/cyanha ...

  2. auto skip function args

    auto skip function args https://repl.it/@xgqfrms/auto-skip-function-args "use strict"; /** ...

  3. SVG namespace & preview bug

    SVG namespace & preview bug error This XML file does not appear to have any style information as ...

  4. flutter 自定义TabBar

    这里有个工作示例 import 'dart:async'; import 'package:flutter/material.dart'; import 'package:rxdart/subject ...

  5. Unity安卓apk打包过程

    前言:对于Unity开发小白来说,Android打包无疑是个头痛的问题,所以我总结了 Unity安卓APK的打包过程 第一步:下载对应版本的Android Platform 第二步:安装JDK并配置J ...

  6. C++实现String类

    1 #include<iostream> 2 #include<cstring> 3 4 class String 5 { 6 public: 7 String(); 8 St ...

  7. 关于各种Formatting context

    Formatting context 我们把网页看作是由很多个盒子组成的,而这些盒子的展示方式,就是由display这个属性来决定的. 这里出现了一个概念,叫做Formatting context(格 ...

  8. 1107 Social Clusters——PAT甲级真题

    1107 Social Clusters When register on a social network, you are always asked to specify your hobbies ...

  9. python进阶(11)生成器

    生成器 利用迭代器,我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成.但是我们在实现一个迭代器时,关于当前迭代到的状态需要我们自己记录,进而才能根据当前状态生成下一个数据. ...

  10. 读懂一个中型的Django项目

    转自https://www.cnblogs.com/huangfuyuan/p/Django.html [前言]中型的项目是比较多的APP,肯会涉及多数据表的操作.如果有人带那就最好了,自己要先了解基 ...