7/21 D 解题报告
这题有点不好理解,意思是每个人只能拿一个整片食物的一部分,而且不能拿两种味道,求每个人都拿到一样体积的食物的情况下最大体积多少。让最大体积和最小体积的食物作为端点进行二分。
以下是代码(可直接AC):
#include <iostream>
#include <cstdio>
#include <cmath>
#include <iomanip>
#define pi acos(-1.0)
using namespace std;
int main()
{
int t;
int n,f,r;
double sum;
int res;
double pie[10005];
double low,high=0;
double mid;
bool flag;
cin>>t;
while(t--)
{
high=0;
cin>>n>>f;
for(int i=0;i<n;i++)
{
cin>>pie[i];
pie[i]=pi*pie[i]*pie[i];
if(high<pie[i])
high=pie[i];//最大体积
}
low=0;
mid=(low+high)/2;
while(low<high)//二分
{
res=0;
for(int j=0;j<n;j++)
res+=floor(pie[j]/mid);//相同体积够分多少人
if(abs(high-low)<1e-7)//控制精度
{
cout<<setiosflags(ios::fixed)<<setprecision(4);
cout<<mid<<endl;
break;
}else{
if(res<f+1)
{
high=mid;
mid=(high+low)/2;
}else{
low=mid;
mid=(high+low)/2;
}
}
}
}
return 0;
}