二分
前言
acm寒假训练第三天,好难QAQ
二分
1.例题代码
POJ3122
#include <bits/stdc++.h>
using namespace std;
#define esp 1e-6
#define pi acos(-1.0)
double a[100000];
int n,m;
int check(double mid)
{
int sum=0;
for (int i = 0; i < n; i++)
{
sum+=(int)(a[i]/mid);
}
return sum>=m;
}
int main()
{
int t,k;
cin>>t;
while (t--)
{
double r=0,l=0;
scanf("%d%d",&n,&m);
m++;
for (int i = 0; i < n; i++)
{
scanf("%d",&k);
a[i]=pi*k*k;
if (a[i]>r)
r=a[i];
}
while(l+esp<r)
{
double mid=(r+l)/2;
if (check(mid))
{
l=mid;
}
else
{
r=mid;
}
}
printf("%.4f\n",r);
}
}