我用的是优先队列,每次选择最大的两个进行2*sqrt()操作,再压入队列.
#include <iostream>
#include <memory.h>
#include <queue>
#include <vector>
#include <cmath>
#include <cstdio>
#include <functional>
using namespace std;
priority_queue<double>q;
int n;
int main(){
while (scanf("%d",&n)==1){
while(q.size())q.pop();
while (n--){
int t;
scanf("%d",&t);
q.push(t);
}
while (q.size()>=2){
double t1=q.top();q.pop();
double t2=q.top();q.pop();
q.push(2*sqrt(t1*t2));
}
printf("%.3lf\n",q.top());
q.pop();
}
return 0;
}