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 100000
12 #define LL long long
13 #define INF 0xfffffff
14 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         else
44         {
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
posted @ 2014-07-18 10:34  _雨  阅读(298)  评论(0编辑  收藏  举报