Area in Triangle POJ - 1927(求三角形内周长一定的图形的最大面积)

传送门

题解:如果绳子足够长,那么直接输出三角形的面积,如果绳子不够三角形的内接圆,那么输出绳子构成的圆的面积,如果绳子正好处于两者之间呢?使用物理上的“撑开”原理

最后的面积就是大三角形的面积减去小三角形的面积再加上校园的面积就是所要的答案,这个时候设小圆的半径为r,大圆的半径为R,为了求出小三角形的面积,尽量使用大三角形的面积跟据比例直接得出来,那么就得得出r/R的值,因为(A+B+C)*(R-r)/R+2*pi*r=l,这个不好用语言解释,最后得出r/R=((A+B+C)-l)/(A+B+C-2*pi*R),然后得出小三角形的面积就是S*r/R*r/R

附上代码:


#include<iostream>
#include<cstdio>
#include<cmath>

using namespace std;

const double pi=acos(-1.0);

double a,b,c,d;

double solve()
{
    double l=a+b+c;
    double cosa=(b*b+c*c-a*a)/(2*b*c);
    double s=0.5*b*c*(sqrt(1-cosa*cosa));
    double r=s*2/l;
    if(d>l){
        return s;
    }else{
        if(2*pi*r>=d){
            return d*d/(4*pi);
        }else{
            double t=(l-d)/(l-2*pi*r);
            double rr=r*t;
            return s-s*t*t+pi*rr*rr;
        }
    }
}

int main()
{
    int casen=0;
    while(scanf("%lf%lf%lf%lf",&a,&b,&c,&d)!=EOF){
        if(!a||!b||!c||!d){
            break;
        }else{
            printf("Case %d: %.2lf\n",++casen,solve());
        }
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值