zoukankan      html  css  js  c++  java
  • PAT 乙级 1070 结绳(25) C++版

    1070. 结绳(25)

    时间限制
    200 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    CHEN, Yue

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

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

    输入格式:

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

    输出格式:

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

    输入样例:
    8
    10 15 12 3 4 13 1 15
    
    输出样例:
    14


    思路:该题要求出最大长度,所以我们就要知道为什么同样做一半操作会导致不同的结果,原因就在大的数取一半和小的数取一半结果不同,大的数减少得多,所以尽可能的减少大数被取一半的次数,比如 2 5 10,肯定按照 2 5 再10来做最大,5 10再2最小,所以这就是为什么使用排序的原因

     1 // 1070.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include<iostream>
     6 #include<typeinfo>
     7 #include<algorithm>
     8 
     9 using namespace std;
    10 
    11 int main()
    12 {
    13     int N,i;
    14 
    15     cin >> N;
    16 
    17     double *p = new double[N],sum=0;
    18 
    19     for (i = 0; i < N; i++)
    20         cin >> p[i];
    21 
    22     sort(p, p + N);
    23 
    24     for (i = 0; i < N-1; i++)
    25         p[i + 1] = (p[i] + p[i + 1]) / 2.0;
    26 
    27     cout << static_cast<int>(p[i]) << endl;
    28 
    29     delete[] p;
    30 
    31     return 0;
    32 }
  • 相关阅读:
    Impala 加载Hive的UDF
    在编译器中调试spark程序处理
    转:Kafka 客户端TimeoutException问题之坑
    Apache Kafka系列(五) Kafka Connect及FileConnector示例
    Apache Kafka系列(四) 多线程Consumer方案
    Apache Kafka系列(三) Java API使用
    Apache Kafka系列(二) 命令行工具(CLI)
    ajax异步刷新
    Mybaties下的分页功能的实现
    读取配置文件的方法
  • 原文地址:https://www.cnblogs.com/cdp1591652208/p/7168349.html
Copyright © 2011-2022 走看看