题目地址:
还是找到了单调函数--分给m人对最大尺寸f(m) 是m的不增函数,那么具体给定m是,二分f(m)使用>=f+1 l=mid 而不是>来保证尽可能取得大
细节: 应该直接二分答案,而不是算出比较精确的半径平方,最后*PI输出,会产生误差,然后PI用arccos(-1),否则也会wa
代码:
#include#include #include using namespace std;//const double PI=3.1415926535; //这样写就wa了 是精度不够?const double PI=acos(-1.0);int N,F;int a[10005];long long person_num(double x){ long long ans=0; for(int i=0;i >T; while(T--) { double max_size=0; cin>>N>>F; double l=0,r=1000000000; // 10000,0000 小了 double mid; while(r-l>=1e-4) { mid=(l+r)/2; if(person_num(mid)>=F+1) l=mid; else r=mid; } printf("%.4lf\n",l); }}