2014/7/3
我是彩笔系列
花样爆零
hdu 的分馅饼问题 同样的二分,问题在于精度的控制,及double 转int的时候可能超范围导致(比如maxn = (s[ i ] 的和)的话,花样作死型wa)
=...=我是彩笔&&弱逼,今天一题都没刷睡了一下午,跟学霸爷们真是比不了不能好好相处了。
#include<stdio.h>
#include<string.h>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<queue>
#include<stack>
#include<map>
#include<climits>
using namespace std;
#define F(n) for(int i = 0;i < n; i++)
#define FF(n) for(int i = 1;i <= n; i++)
#define f(n) for(int j = 0;j < n; j++)
#define ff(n) for(int j = 1;j <= n; j++)
#define ll long long
const double P= acos(-1);
const int N=100050;
int n ,m , k;
double s[N] , maxn, minn , mid;
void init()
{ F(n){ scanf("%lf",&s[i]); s[i]=s[i]*s[i]*P; maxn = max(maxn,s[i]); } }
int D()
{
int num=0,cnt=0;
F(n)
{
cnt=floor(s[i]/mid);
num+=cnt;
}
if(num >= k+1)
return 1;
else return 0;
}
int main()
{
while(~scanf("%d",&m))
{
while(m--)
{
scanf("%d%d",&n,&k);
maxn=0,minn=0;
init();
while( maxn-minn > 0.000001)
{
mid=(minn + maxn)/2;
if(D())minn=mid;
else maxn=mid;
}
printf("%.4f\n",minn);
}
}
return 0;
}