如题:http://poj.org/problem?id=1862
我都觉得水的题,真的是够水了。
题目大意:给出几个数,每次随意取出2个a,b,变成一个2*sqrt(a*b)在放回去,要求最终的最小值。
思路:维护一个大根堆,取出之后合成在放回去,剩一个的时候就是答案。
#include<iostream>
#include<cstdio>
#include<queue>
#include<cmath>
using namespace std;
int main()
{
priority_queue<double>que;
int N;
scanf("%d",&N);
while(N--)
{
double a;
scanf("%lf",&a);
que.push(a);
}
while(que.size()>1)
{
double a,b;
a=que.top();
que.pop();
b=que.top();
que.pop();
double c=2*sqrt(a*b);
que.push(c);
}
double res=que.top();
printf("%.3lf\n",res);
}