【题目描述】
当长度为L的一根细木棍的温度升高n度,它会膨胀到新的长度L’=(1+n*C)*L,其中C是热膨胀系数。
当一根细木棍被嵌在两堵墙之间被加热,它将膨胀形成弓形的弧,而这个弓形的弦恰好是未加热前木棍的原始位置。
你的任务是计算木棍中心的偏移距离。
【输入】
三个非负实数:木棍初始长度(单位:毫米),温度变化(单位:度),以及材料的热膨胀系数。
保证木棍不会膨胀到超过原始长度的1.5倍。
【输出】
木棍中心的偏移距离(单位:毫米),保留到小数点后第三位。
【输入样例】
1000 100 0.0001
【输出样例】
61.329
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#define INF 999999999
#define N 1000001
#define MOD 1000000007
#define E 1e-12
using namespace std;
int main()
{
double l,n,c;
cin>>l>>n>>c;
double left=0,right=acos(-1.0),mid;
double l2=(1+n*c)*l;
while(right-left>E)
{
mid=(left+right)/2.0;
if(2*l2/l>mid/sin(mid/2.0))
left=mid;
else
right=mid;
}
printf("%.3lf\n",l2/mid*(1-cos(mid/2)));
return 0;
}
信息学奥赛一本通T1246:分治算法 膨胀的木棍 归属于 分治算法,更多同类题解源程序见:分治算法 和 膨胀的木棍
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!