LightOj1137 - Expanding Rods(二分+数学)

时间:2024-01-14 15:03:26

题目链接:http://lightoj.com/volume_showproblem.php?problem=1137

题意:有一根绳子的长度为l,在有温度的情况下会变形为一个圆弧,长度为 l1 = (n*c+1)*l;求图中的h;并说明增加的长度不超过原长度的一半;

LightOj1137 - Expanding Rods(二分+数学)

我们可以二分h,然后根据h求弧长,比较一下和l1的长度即可;

把弧长公式记错我也是醉了;

 

#include <stdio.h>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
const int N = ;
const double eps = 1e-;
const double PI = acos(-); int main()
{
int T, t = ;
double n, c, l;
scanf("%d", &T);
while(T--)
{
scanf("%lf %lf %lf", &l, &n, &c);
double l1 = (n*c+)*l;
double left = , right = l/, ans = ;
while(right-left > eps)
{
double mid = (right + left)/;/// h;
double r = (l*l/+mid*mid)/(*mid);///半径r;
double a = *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\n", t++, ans);
}
return ;
}