您的位置:首页 > 其它

poj 1862

2016-07-26 01:32 417 查看

题目概述

某种生物质量num,两个这样的生物碰撞时会融合,质量为2*sqrt(num1*num2),给出N个生物的质量,求其融合成一个时质量最小值

不会有3个及以上的生物同时碰撞

时限

1000ms/3000ms

输入

第一行正整数N,其后N行,每行一个正整数num,输入到EOF结束

限制

1<=N<=100;1<=num<=10000

输出

每行一个数,所求质量最小值

样例输入

3

72

30

50

样例输出

120.000

讨论

水题,先按降序排序,然后一个个算就行了

题解状态

192K,0MS,C++,606B

题解代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<functional>
using namespace std;
#define INF 0x3f3f3f3f
#define MAXN 102
#define memset0(a) memset(a,0,sizeof(a))
#define EPS 1e-6

int N;//生物数量
double nums[MAXN];//生物质量
double fun()
{
for (int p = 0; p < N; p++)
scanf("%lf", &nums[p]);//input
sort(nums, nums + N, greater<double>());//降序排序
double sum = nums[0];
for (int p = 1; p < N; p++)
sum = 2 * sqrt(sum*nums[p]);
return sum;
}
int main(void)
{
//freopen("vs_cin.txt", "r", stdin);
//freopen("vs_cout.txt", "w", stdout);

while (~scanf("%d", &N)) {//input
printf("%.3lf\n", fun());//output
}
}


EOF
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: