import java.util.Arrays; import java.util.Scanner; public class Main { static int n; //多少个蛋糕 static int per; //多少人 static double arr[]; static double pi = Math.acos(-1.0); static int count; public static void main(String[] args) { Scanner cin = new Scanner(System.in); int N = cin.nextInt(); while(N-->0){ n = cin.nextInt(); per = cin.nextInt(); per++; arr = new double[n]; for (int i = 0; i < n; i++) { arr[i] = cin.nextDouble(); arr[i] = arr[i]*arr[i]*pi; } Arrays.sort(arr); double rigth=arr[n-1],left=0,middle=0; if(per<n){ count = per; //人比糕点个数少以人来划分 因为糕点不能拼凑 }else{ count = n; //人比糕点多就以糕点来划分 } while(rigth-left>=1e-6){ middle = (rigth+left)/2; if(judge(middle)){ left = middle; }else{ rigth = middle; } } System.out.printf("%.4f",left); System.out.println(); } } private static boolean judge(double middle) { int num = 0; //人多就以糕点 for (int i = arr.length-1; i >=arr.length- count; i--) { num = num + (int) (arr[i]/middle); if(num>=per){ return true; } } return false; } }注意格式不能使用“%.4f\n”否则会出现格式错误
1969Pie 二分法JAVA
猜你喜欢
转载自blog.csdn.net/fly_eason/article/details/79718916
今日推荐
周排行