您的位置:首页 > 其它

FZU 2095 水面高度

2016-03-16 07:26 288 查看
一共六种情况。手算即可。

#include<cstdio>
#include<cstring>
#include<cmath>

int T;
double a,b,c,d,x;
double ans;

int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%lf%lf%lf%lf%lf",&a,&b,&c,&d,&x);
double h=sqrt(c*c-x*x*c*c/(a*a));
double p=x*c/a;
double tmp=a*d;

if(x<=h)
{
double m=a*a/sqrt(a*a-x*x);
double s1=m*x/2;
double s2=a*c-m*x;
double s3=m*x/2;

if(tmp<=s1) ans=sqrt(tmp/s1)*x;
else if(tmp<=s1+s2) ans=(tmp-s1+m*x)/m;
else ans=x+h-sqrt((a*c-tmp)/s1)*x;
}
else
{
double m=c*c/p;
double s1=m*h/2;
double s2=a*c-m*h;
double s3=m*h/2;

if(tmp<=s1) ans=sqrt(tmp/s1)*h;
else if(tmp<=s1+s2) ans=(tmp-s1+m*h)/m;
else ans=h+x-sqrt((a*c-tmp)/s1)*h;
}

printf("%.2lf\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: