有F+1个人来分N个圆形派,每个人得到的必须是一整块派(比如一个圆的1/5) ,  而不是几块拼在一起。派的面积要相同。

求每个人最多得到多大面积的派(不必是圆形)

二分答案---假设为x

一个圆 分为 S/x ,算出能划出几块,和总人数比较

 #include <iostream>
 #include <cstring>
 #include <algorithm> 
 #include <vector>
 #include <cmath>
 using namespace std;
 #define N 10003
  const double pi=acos(-1);
  double a[N];
  int n,m;
  
  int test(double x){
  	int s=0;
  	for(int i=1;i<=n;i++) s+=floor(a[i]/x);
  	return s>=m;
  }
 int main(){
 	int cas;
 	cin>>cas;
 	
 	while(cas--){
   cin>>n>>m; m++;
   int i,x;  double l=0,r=0;
   
   for(i=1;i<=n;i++){
   	 cin>>x; a[i]=x*x*pi; r=max(r,a[i]);
   }
   while(r-l>1e-6){
   	double md=(l+r)/2; 
   	if(test(md)) l=md; else r=md;
   }
   printf("%.4lf\n",l);
   	}
 }
 
 
 

posted on 2022-10-26 16:18  towboat  阅读(9)  评论(0)    收藏  举报