http://acm.fzu.edu.cn/problem.php?pid=1083
题目大意:路面热胀冷缩会使的路面膨胀起来形成一个拱形,叫你求拱形中心离地面多远。给定你C,n根据公式可以求出拱形的长度L。
以拱形为圆的一段弧,路面为圆的弦,半径同时通过路面中点和弧中点构造一个扇形图出来。取扇形角度为a,则可以推出
R = L/(2*R),R=l/(2*sin(a)),从而推出 l/L=a/sin(a)。然后利用二分法求极限的方法求出角度 a。再通过求出的角度就能轻易求出距离x了。
#include <stdio.h> #include <math.h> int main() { double n,C; double l; double L; double degree1,degree2,degree; while (scanf("%lf%lf%lf",&l,&n,&C)!=EOF) { if(l==-1||n==-1||C==-1) break; L=l*(1+n*C); if (n*C == 0) { printf("0.000/n"); continue; } else { degree1=0; degree2=acos(-1)/2; while (degree2-degree1>1e-12) { degree=(degree1+degree2)/2; if (l/L-sin(degree)/degree>0) { degree2=degree; } else { degree1=degree; } } printf("%0.3lf/n",(l/(2*sin(degree))-l/(2*tan(degree)))); } } return 0; }