#1245 : 王胖浩与三角形

时间限制: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

已知三角形的三个边长a,b,c,其面积是sqrt((a+b+c)*(a+b-c)*(a+c-b)*(b+c-a))/4。

考虑面积公式sqrt((a+b+c)(a+b-c)(b+c-a)(a+c-b))/4,如果固定了a和b+c,那么b和c越接近越好。

所以将三条边排序,首先增加第一条边到和第二条边一样长,然后一起增加前两条边到和第三条边一样长,然后三条边一起增加。

代码:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; double a[5], res, ll; int main()
{
//freopen("i.txt","r",stdin);
//freopen("o.txt","w",stdout); int test;
scanf("%d", &test); while (test--)
{
cin >> a[0] >> a[1] >> a[2] >> ll; sort(a, a + 3); if (ll <= a[1] - a[0])
{
a[0] = a[0] + ll;
}
else
{
ll = ll - (a[1] - a[0]);
a[0] = a[1];
if (ll/2 <= a[2] - a[1])
{
a[1] = a[1] + ll / 2;
a[0] = a[0] + ll / 2;
}
else
{
ll = ll - 2 * (a[2] - a[1]);
a[1] = a[2];
a[0] = a[2]; a[0] = a[0] + ll / 3;
a[1] = a[1] + ll / 3;
a[2] = a[2] + ll / 3;
}
}
res = sqrt((a[0] + a[1] + a[2])*(a[0] + a[1] - a[2])*(a[1] + a[2] - a[0])*(a[0] + a[2] - a[1])) / 4;
printf("%.10lf\n", res);
}
//system("pause");
return 0;
}

最新文章

  1. Centos7 防火墙简介(一)
  2. C++迟后联编和虚函数表
  3. make clean 和make distclean的区别
  4. easyui返回数据类型
  5. MySQL SQL优化之字符串索引隐式转换
  6. 关于SWT中的表格(TableViewer类)
  7. 【转】adobe acrobat pro修改pdf文字
  8. 【设计模式】Template Method模式
  9. lufylegend库 LTextField
  10. 图解WebGL&amp;Three.js工作原理
  11. 《白帽子讲Web安全》- 学习笔记
  12. css清浮动与动态计算元素宽度
  13. iOS开发造轮子 | 通用占位图
  14. Windows任务计划 &amp; Linux crontab定时自动任务
  15. java容器的总结
  16. E: could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporary unavailable) E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is an other process using it
  17. WPF之ComboBox的VisualTreeHelper
  18. CentOS7 安装配置备忘录
  19. LeetCode - 412. Fizz Buzz - ( C++ ) - 解题报告 - to_string
  20. hive mapjoin优化

热门文章

  1. 关于python 3.x import matplotlib as plt ImportError: DLL load failed: 找不到指定的模块
  2. JavaScript - 运行机制,作用域,作用域链(Scope chain)
  3. springboot devtool热部署的一个大坑
  4. PAT T1004 To Buy or Not to Buy - Hard Version
  5. JavaWeb之过滤器
  6. 夯实Java基础(二十一)——Java反射机制
  7. 学习笔记(13)- decaNLP训练WikiSQL
  8. 将图片转化为base64编码字符串
  9. 如何用C++读取图片中的像素
  10. Linux命令:netstat命令