编程语言:Java
题目链接:http://poj.org/problem?id=1862
题解:数学推理一下就知道该取最大的两个相乘,这样最后剩下的才是所有计算中最小的。
结果:AC
import java.io.*;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;
public class Main {
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
static Scanner sc = new Scanner(new BufferedInputStream(System.in));
public static void main(String[] args) throws IOException {
int n=sc.nextInt();
PriorityQueue<Double> que=new PriorityQueue<Double>(n,new Comparator<Double>(){
@Override
public int compare(Double o1, Double o2) {
if(o1>o2)
return -1;
else
return 1;
}
});
for(int i=0;i<n;i++){
que.add(sc.nextDouble());
}
while(que.size()!=1){
double d1=que.poll();
double d2=que.poll();
que.add(2 * Math.sqrt(d1 * d2));
}
out.printf("%.3f",que.poll());
out.flush();
}
}