题意:

UVA - 11524  InCircle 内切圆 (数学)_数学

如图 有一个内切圆 告诉你内切圆的半径R,  并且三角形  比例知道  m1 : n1  m2 : n2  m3 : n3,注意  这些只是比例,并不是实际长度,刚开始以为一个大水题,结果样例都不对,错误的认为那是实际长度了!

思路:

需要知道一个内切圆的半径公式:

UVA - 11524  InCircle 内切圆 (数学)_#include_02

因此我们设AB = m1 x + n1 x;

可以将三角形三边表示出来!

UVA - 11524  InCircle 内切圆 (数学)_C++_03

将三边带入内切圆半径公式即可求出X的值

这样即可求出三角形三个边的实际长度!

在利用三角形面积公式:

UVA - 11524  InCircle 内切圆 (数学)_三角形面积_04

即可求出S!

AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;
int main(){
    int T;
    int kase=0;
    scanf("%d",&T);
    while(T--){
        double r;
        double m1,n1,m2,n2,m3,n3;
        scanf("%lf",&r);
        scanf("%lf %lf",&m1,&n1);
        scanf("%lf %lf",&m2,&n2);
        scanf("%lf %lf",&m3,&n3);
        double k1 = n1+m1;
        double k2 = (n1*m2+n2*n1)/m2;
        double k3 = (m1*n3+m3*m1)/n3;
        double A1 = k1+k2-k3;
        double B1 = k1-k2+k3;
        double C1 = -k1+k2+k3;
        double k4 = k1+k2+k3;
        double x = 2*r/sqrt(A1*B1*C1/k4);
        double sum = k4*x;
        double s = sum*r/2;
        printf("%.15lf\n",s);
    }
    return 0;
}