做法:
全部放入队列,每次去两个大的进行
2 * sqrt(m1*m2 )
因为要使最终的结果最小,所以大的先进行开方,(是因为先进行合并的进行更多次开方)。
#include <iostream>
#include <cstdio>
#include <string.h>
#include <queue>
#include <cmath>
typedef long long int lli;
using namespace std;
int main(){
int t;
cin>>t;
priority_queue<double,vector<double>,less<double> > q;
int temp;
for(int i = 1;i <= t;i++){
scanf("%d",&temp);
q.push(temp);
}
while(q.size() > 1){
double a = q.top();
q.pop();
double b = q.top();
q.pop();
q.push(2*sqrt(a*b));
}
double ans = q.top();
printf("%.3f\n",ans);
}