ural 1874 Football Goal

来源:互联网 发布:pubmed数据库官网 编辑:程序博客网 时间:2024/06/03 23:01
 题目地址:http://acm.timus.ru/problem.aspx?space=1&num=1874

这题可够蛋疼的,开始不断地想着推公式,推了老半天没推出来,后来在ACM_DIY里面

找到zjut_DD神牛问了一下,因为看到DD神牛已经过了这题了,在神牛的耐心解答下,

才搞懂了。三分。

见下图:

 

 

四边形的面积ACBD由三角形ACB和三角形ABD组成。

设AB的长度为z,

那么三角形ACB的最大面积是 z*z/4.

三角形ABD的面积用海伦公式可以表示出来。

z是变长,范围是[0,x+y].

面积公式是凸性函数,对z进行三分就行了。

 

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>#include <vector>using namespace std;const double eps = 1e-9;double x,y;double Cal_area(double z){   double p = (x+y+z)/2;   return z*z/4+sqrt(p*(p-x)*(p-y)*(p-z));}int main(){while(scanf("%lf %lf",&x,&y)!=EOF){   double l=0;   double r=x+y;   while(fabs(l-r)>eps)   {           double mid=(l+r)/2;   double midmid=(mid+r)/2;   double midv=Cal_area(mid);   double midmidv=Cal_area(midmid);   if(midv>midmidv-eps)   r=midmid;   else   l=mid;   }   printf("%.9f\n",Cal_area(l));}return 0;}


 

原创粉丝点击