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\n",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\n",bug[0]);
38 } 

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

 

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

posted @ 2018-08-08 09:46  Darkness_ly  阅读(172)  评论(0编辑  收藏  举报