Problem 2095 水面高度
Problem Description
kk手上有个长方体,三边长AC,AB,AD分别为a,b,c,现在里面的水高度为d(0<=d<=c)。现在kk将长方体沿AB边翻转,当C点的高度为x(0<=x<a)时,求水面高度。
Input
第一行一个整数T,表示有T(1<=T<=1000)组数据。
每组数据输入五个整数:a b c d x (10<=a,b,c<=100)。
Output
每组数据输出一行,表示水面高度,结果保留两位小数。
Sample Input
215 10 20 10 1283 33 26 18 7
Sample Output
几何题
#include <iostream>
#include <algorithm>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
double a,b,c,d,x;
double ans;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lf%lf%lf%lf%lf",&a,&b,&c,&d,&x);
if(x==0)
{
printf("%.2f\n",d);
continue;
}
double s=a*d;
double angle=asin(x/a);
double sinx=sin(angle);
double cosx=cos(angle);
//double cosx=sqrt(1-sinx*sinx);
double x2=c*cosx;
double h2=x+x2;
double l;
double s1;
if(x<x2)
{
l=a/cosx;
s1=l*x*0.5;
//h2=cosx*c+x;
}
else if(x>=x2)
{
l=c/sinx;
s1=l*x2*0.5;
x=x2;
//h2=sinx*a+x;
}
if(s<=s1)
{
double num=s/s1;
double k=sqrt(num);
ans=k*x;
}
else if(s>s1&&s<=(a*c-s1))
{
double s2=s-s1;
double h=s2/l;
ans=h+x;
}
else
{
//double s2=a*c-s1;
//double s3=s-s2;
double s4=a*c-s;
double num=s4/s1;
double k=sqrt(num);
double h=k*x;
ans=h2-h;
}
printf("%.2f\n",ans);
}
return 0;
}