LightOJ 1043 - Triangle Partitioning (简单数学)


    
1043 - Triangle Partitioning
PDF (English) Statistics Forum
Time Limit: 0.5 second(s) Memory Limit: 32 MB

See the picture below.

You are given AB, AC and BC. DE is parallel to BC. You are also given the area ratio between ADE and BDEC. You have to find the value of AD.

Input

Input starts with an integer T (≤ 25), denoting the number of test cases.

Each case begins with four real numbers denoting AB, AC, BC and the ratio of ADE and BDEC (ADE / BDEC). You can safely assume that the given triangle is a valid triangle with positive area.

Output

For each case of input you have to print the case number and AD. Errors less than 10-6 will be ignored.

Sample Input

Output for Sample Input

4

100 100 100 2

10 12 14 1

7 8 9 10

8.134 9.098 7.123 5.10

Case 1: 81.6496580

Case 2: 7.07106781

Case 3: 6.6742381247

Case 4: 7.437454786

 

题意就不说了,我都看懂了。

介绍下海伦——秦九昭公式 ,已知三角形的三边是a,b,c;设周长是C=a+b+c,则面积S=根号[C*(C-a)*(C-b)*(C-c)]。

由上面公式就能很容易求出△ABC的面积,知道△ADE的面积与四边形DBCE的比值,那么就很容易求出△ADE与△ABC的比值,进而再用海伦——秦九昭公式推出边的比值,最后求出AD边。(其实相似三角形的面积比是边长比的平法)。

代码如下:

#include<cstdio>
#include<cstring>
#include<cmath>
int main()
{
	int t,k=1;
	double C,s,a,b,c,q;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%lf%lf%lf%lf",&a,&b,&c,&q);
		C=(a+b+c)/2.0;
		s=sqrt(C*(C-a)*(C-b)*(C-c));
		double x=(q*s)/(1+q);
		double q_L=sqrt(x/s);
		double L=q_L*a;
		printf("Case %d: %.6f\n",k++,L);
	}
	return 0;
}




你可能感兴趣的:(LightOJ 1043 - Triangle Partitioning (简单数学))