欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

hihoCoder挑战赛16 王胖浩与三角形

发布时间:2023/12/15 编程问答 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 hihoCoder挑战赛16 王胖浩与三角形 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题目1 : 王胖浩与三角形
时间限制:1000ms
单点时限:1000ms
内存限制:256MB
描述
王胖浩有一个三角形,三边长为a,b,c。他有特殊的能力,能增加三条边的边长,增加的总长度不能超过l。

他想通过合理地使用他的特殊能力,使得三角形的面积最大。

输入
第一行一个整数T,表示测试数据个数。

以下T行,每行一个四个整数a,b,c,l。

数据范围:

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

输出
输出T行,每行一个实数,表示三角形的面积。要求相对误差不能超过10-9。

样例输入
1
2 3 3 3
样例输出
5.8216152143

海伦公式,以及智商的分类讨论

#include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<algorithm> #include<math.h> using namespace std; bool cmp(double a,double b) { return a<b; } int main() { int t,i,j,k; double l,p; double num[3]; scanf("%d",&t); while(t--){ scanf("%lf%lf%lf%lf",&num[0],&num[1],&num[2],&l); sort(num,num+3,cmp); if(num[1]-num[0]>=l){ num[0]+=l; } else if(num[2]-num[1]+num[2]-num[0]>=l){ num[0]=num[1]=(num[0]+num[1]+l)/2.0; } else { num[0]=num[1]=num[2]= (num[0]+num[1]+num[2]+l)/3.0; } p=(num[0]+num[1]+num[2])/2.0; printf("%.11f\n",sqrt(p*(p-num[0])*(p-num[1])*(p-num[2]))); } return 0; }

总结

以上是生活随笔为你收集整理的hihoCoder挑战赛16 王胖浩与三角形的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。