1969Pie 二分法JAVA

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”否则会出现格式错误

猜你喜欢

转载自blog.csdn.net/fly_eason/article/details/79718916