首页 > 代码库 > poj1927Area in Triangle

poj1927Area in Triangle

链接

物理渣只能搜题解了。。

分三种情况

1、len>=a+b+c

2、len<内切圆半径 圆的面积是最大的 --》以len为周长的圆

3、看这篇http://blog.sina.com.cn/s/blog_6a46cc3f0100tujn.html

 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stdlib.h> 6 #include<vector> 7 #include<cmath> 8 #include<queue> 9 #include<set>10 using namespace std;11 #define N 10000012 #define LL long long13 #define INF 0xfffffff14 const double eps = 1e-8;15 const double pi = acos(-1.0);16 const double inf = ~0u>>2;17 int dcmp(double x)18 {19     if(fabs(x)<eps) return 0;20     else return x<0?-1:1;21 }22 int main()23 {24     double a,b,c,l;25     int kk = 0;26     while(scanf("%lf%lf%lf%lf",&a,&b,&c,&l)!=EOF)27     {28         if(fabs(a)<eps&&fabs(b)<eps&&fabs(c)<eps&&fabs(l)<eps) break;29         double p = (a+b+c)/2;30         double area = sqrt(p*(p-a)*(p-b)*(p-c));31         double r = sqrt((p-a)*(p-b)*(p-c)/p);32         double ans ;33         if(dcmp(2*pi*r-l)>=0)34         {35             ans = l*l/(4*pi);36             //cout<<"2"<<endl;37         }38         else if(dcmp(l-a-b-c)>=0)39         {40             ans = area;41             //cout<<"1"<<endl;42         }43         else44         {45             double k = (a+b+c-l)/(a+b+c-2*pi*r);46             r*=k;47             ans = area-area*k*k+pi*r*r;48            // cout<<"3"<<endl;49         }50         printf("Case %d: %.2f\n",++kk,ans);51     }52     return 0;53 }
View Code