总时间限制:
1000ms
内存限制:
65536kB
描述
当长度为L的一根细木棍的温度升高n度,它会膨胀到新的长度L'=(1+n*C)*L,其中C是热膨胀系数。
当一根细木棍被嵌在两堵墙之间被加热,它将膨胀形成弓形的弧,而这个弓形的弦恰好是未加热前木棍的原始位置。
你的任务是计算木棍中心的偏移距离。
输入
三个非负实数:木棍初始长度(单位:毫米),温度变化(单位:度),以及材料的热膨胀系数。
保证木棍不会膨胀到超过原始长度的1.5倍。
输出
木棍中心的偏移距离(单位:毫米),保留到小数点后第三位。
样例输入
1000 100 0.0001
样例输出
61.329
#include<stdio.h>
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double l, t, c;
cin >> l >> t >> c;
double L = (1 + t * c) * l;
L /= 2;
l /= 2;
//L和l都变成原来的一半
double left = 0, right = L;
double mid;
//通过left right mid找出木棍中心的偏移距离
double R, LL;//R代表弧所对应的圆的半径 LL代表估计的弧度值
while (right - left >= 1e-7) {
mid = (left + right) / 2;
R = (mid * mid + l * l) / (2 * mid);//R^2-L^2=(R-mid)^2
LL = R * asin(l / R);
if (LL > L) {
right = mid;
}
else {
left = mid;
}
}
printf("%.3f", left);
return 0;
}