题目地址:POJ 1905
用二分枚举h,然后判断弧长是否符合条件。重点还是在精度问题上,具体看代码吧。。
#include <iostream> #include <string.h> #include <math.h> #include <queue> #include <algorithm> #include <stdlib.h> #include <map> #include <set> #include <stdio.h> using namespace std; #define LL __int64 #define pi acos(-1.0) const int mod=9901; const int INF=0x3f3f3f3f; const double eqs=1e-6; bool Judge(double f1, double f2) { return f2-f1>1e-4; } bool judge(double f1, double f2) { return fabs(f1-f2)<eqs; } double bin_search(double lenth, double L) { double low=0, high=L/2, mid, r; while(Judge(low,high)){ mid=(low+high)/2; r=(4*mid*mid+L*L)/(8*mid); if(2*r*asin(L/(2*r)) < lenth) low=mid; else high=mid; } return mid; } int main() { double L, c, n, lenth; while(scanf("%lf%lf%lf",&L,&c,&n)!=EOF&&L>=0){ lenth=(1+n*c)*L; printf("%.3f\n",bin_search(lenth, L)); } return 0; }
POJ 1905 Expanding Rods (二分+计算几何+精度处理)
原文地址:http://blog.csdn.net/scf0920/article/details/43063531