Codeforces #1 C. Ancient Berland Circus

题目链接http://codeforces.com/problemset/problem/1/C
一道几何题以前高中学的三角形的知识(好吧,有的结论还是看大神们写的)
要用到的知识注释了
注意用正玄定理的时用两条较小边带入公式

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define PI acos(-1)
#define INF 0.01
using namespace std;
double gcd_float(double x ,double y ) // float gcd 求法。
{
    return x < INF ? y : gcd_float(fmod(y,x),x);
}
int main()
{
    double x1 , x2 , x3 , y1 , y2 ,y3;
    while(cin>>x1>>y1>>x2>>y2>>x3>>y3)
    {
        double len1 = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
        double len2 = sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
        double len3 = sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));
        double p = (len1 + len2 + len3)/2;
        double s = sqrt(p * (p-len1) * (p-len2) * (p-len3));//海伦公式求三角形面积。
        double r = len1 * len2 * len3 / (4 * s);

        //三角形三边面积和外接圆的关系 S=abc/(4r);
        //三角形三边面积和内切圆的关系 S=r*(a+b+c);

        double K;
        if(len1>len3)
        {
            K=len1;
            len1=len3;
            len3=K;
        }
        if(len2>len3)
        {
            K=len2;
            len2=len3;
            len3=K;
        }
        double A = 2 * asin(len1 / (2 * r)) ;
        double B = 2 * asin(len2 / (2 * r));
        double C = 2 * PI - A - B;
        double flag = gcd_float(gcd_float(A ,B),C);
        double ans = PI * r * r * sin(flag) / flag ;
        printf("%.6lf\n", ans);

    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值