题目链接:http://lightoj.com/volume_showproblem.php?problem=1137
题意:有一根绳子的长度为l,在有温度的情况下会变形为一个圆弧,长度为 l1 = (n*c+1)*l;求图中的h;并说明增加的长度不超过原长度的一半;
我们可以二分h,然后根据h求弧长,比较一下和l1的长度即可;
把弧长公式记错我也是醉了;
#include <stdio.h> #include <algorithm> #include <cstring> #include <cmath> using namespace std; const int N = 2010; const double eps = 1e-6; const double PI = acos(-1); int main() { int T, t = 1; double n, c, l; scanf("%d", &T); while(T--) { scanf("%lf %lf %lf", &l, &n, &c); double l1 = (n*c+1)*l; double left = 0, right = l/2, ans = 0; while(right-left > eps) { double mid = (right + left)/2;/// h; double r = (l*l/4+mid*mid)/(2*mid);///半径r; double a = 2*acos((r-mid)/r);///圆心角a,弧长公式a*r; if(fabs(r*a-l1)<eps) { ans = mid; ///break;不能加这句...; } if(r*a < l1) left = mid; else right = mid; } printf("Case %d: %.6f ", t++, ans); } return 0; }