首页 > 其他 > 详细

hihoCoder #1245 WPH and Triangles

时间:2015-11-02 15:13:27      阅读:342      评论:0      收藏:0      [点我收藏+]

Description

WPH has a triangle whose three edges are of length a, b, c.

He has super power to enlarge the edges, but the total length that was enlarged should be no more than l.

He wants to maximize the area of the triangle.

Input

The first line with an integer T, denoting the number of test cases.

Following T lines, each line with 4 integers a, b, c, l

Data Limit:

1<=T<=104, 1<=a,b,c<=106, 0<=l<=106

Output

For each test case output one line with a float number, denoting the area of the triangle.

Your answer will be considered to be right if it has a relative error less than 10-9.

Sample Input

1
2 3 3 3

Sample Output

5.8216152143

Solution:

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <algorithm>
 4 
 5 double area(double a, double b, double c) {
 6     double p = (a + b + c) / 2;
 7     return sqrt(p*(p - a)*(p - b)*(p - c));
 8 }
 9 
10 int main() {
11     int T;
12     fscanf(stdin, "%d", &T);
13     while (T--) {
14         int a, b, c, L;
15         fscanf(stdin, "%d%d%d%d", &a, &b, &c, &L);
16         double s[3];
17         s[0] = a;
18         s[1] = b;
19         s[2] = c;
20         std::sort(s, s + 3);
21         if ((s[0] + s[1] + L) / 2.0 >= s[2]) {
22             double ss = (s[0] + s[1] + s[2] + L) / 3.0;
23             printf("%.10lf\n", area(ss, ss, ss));
24         }
25         else if (s[0]+L >= s[1]){
26             double ss = (s[0] + s[1] + L) / 2.0;
27             printf("%.10lf\n", area(ss, ss, s[2]));
28         }
29         else {
30             double ss = s[0] + L;
31             printf("%.10lf\n", area(ss, s[1], s[2]));
32         }
33     }
34 }

 

 

hihoCoder #1245 WPH and Triangles

原文:http://www.cnblogs.com/liew/p/4929957.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!