• POJ1862-Stripies


    天降正义!!!

    【题目描述】

    两条变形虫可以进行合并,合并后新的个体质量为2*sqrt(m1*m2),m1、m2是原来未合并前两条变形虫的质量。已知3条或3条以上变形虫无法进行合并。
    现在请你编程解决,当 N条变形虫进行两两合并,最后成为一条变形虫时,最小的质量为多少。

    【输入】

    第一行输入一个整数N(1<=N<=100),表示变形虫的数量。接下来N行每行包括一个1到10000之间的正整数,表示每条变形虫的重量。

    【输出】

    输出一个整数,表示最小可能生成的变形虫重量,精确到小数点后第三位。

    【输入示例】

    3

    72

    30

    30

    【输出示例】

    120.000

    好吧,令人失望的是,这道题是个贪心(不是深搜QWQ)

    我们稍微计算一下,可以发现m*n>=2*sqrt(m*n)。

    所以,每次只要把最大的两个数进行计算就可以了。

    但是,这道题最坑的地方反而在于输出格式。

    首先,我用的是这种:

    1 printf("%7.3f",bug[0]);

    成功的输出格式错误。(fuck)

    然后,我又改成这种:

    1 cout <<setprecision(3) <<std::fixed<<x <<endl;

    没加头文件,编译错误。(无fuck说)

    最后,我改成这种:

    1 printf("%.3lf
    ",bug[0]);

     终于对了!!!(哭出声来)

    好的不扯淡了,以下代码:

     1 #include<iostream>
     2 #include<cmath>
     3 #include<cstring>
     4 #include<algorithm> 
     5 using namespace std;
     6 int n;
     7 double bug[113];
     8 void px()
     9 {
    10     for(int i=0;i<n;i++)
    11     {
    12         for(int j=i+1;j<n;j++)
    13         {
    14             if(bug[i]<bug[j])
    15             {
    16                 swap(bug[i],bug[j]);
    17             }
    18         }
    19     }
    20 }
    21 int main()
    22 {
    23     cin>>n;
    24     for(int i=0;i<n;i++)
    25     {
    26         cin>>bug[i];
    27     }
    28     int k=n;
    29     while(k>1)
    30     {
    31         px();
    32         double a=2*sqrt(bug[0]*bug[1]);
    33         bug[1]=0;
    34         bug[0]=a;
    35         k--;
    36     }
    37     printf("%.3lf
    ",bug[0]);
    38 } 

     总之,一道输出贼坑贼坑的贪心就这么出来了。老娘要给作者寄刀片!

     

    在暴风雨中低着头,是为了不让雨水模糊风雨后眼中的彩虹。

  • 相关阅读:
    Dockerfile基于centos镜像编译安装httpd
    Dockerfile基于centos镜像编译安装nginx
    Dockerfile介绍和常用指令
    Docker存储卷
    正则表达式
    Sed与Awk
    Shell函数
    Shell脚本基础
    Autofs
    Podman
  • 原文地址:https://www.cnblogs.com/DK-F/p/9440976.html
Copyright © 2020-2023  润新知