sgu-244 Height, Bisector and Median

题目大意:

给你一个三角形,已知一条边上的高 AH 和中线 AM 的长度,以及对应角的角平分线 AD 长度,要求你求出这个三角形,然后用坐标输出。

解题思路:

这里写图片描述
首先我们脑补可得,有解的情况只可能是(a=b && b=c) || (c>b && b>a)否则就输出” NO ”。
然后重点就是怎么求ans,首先根据答案的任意性,我们显然可以令定点为 (0,0) ,然后只要求出了 x ,那么剩下的两个点就是(x+g,a),(x+g,a),首先根据勾股定理, g=c2a2t=gb2a2 ,然后根据角平分线定理,有 ABBD=ACCD , AB=a2+(xg)2AC=a2+(x+g)2BD=xtCD=x+t ,带入之后整理可得, x=a2tgt+gt 。然后就愉快的AC了。( PS: a=b=c的情况随便搞我就不说了)

AC代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#define sqr(a) ((a)*(a))

using namespace std;

double a,b,c;

int main()
{
    freopen("sgu244.in","r",stdin);
    freopen("sgu244.out","w",stdout);
    int aa,bb,cc;
    scanf("%d%d%d",&aa,&bb,&cc);
    a=aa,b=bb,c=cc;
    double t=sqrt(sqr(c)-sqr(a))-sqrt(sqr(b)-sqr(a));
    double g=sqrt(sqr(c)-sqr(a));
    if(aa==bb && bb==cc)
    {
        puts("YES");
        printf("0 0\n");
        printf("1 %d\n-1 %d\n",-aa,-aa);
    }
    else if(cc>bb && bb>aa)
    {
        puts("YES");
        printf("0 0\n");
        double x=sqrt(sqr(a)*t/(g-t)+g*t);
        printf("%.20lf %.20lf\n",x+g,-a);
        printf("%.20lf %.20lf\n",-x+g,-a);
    }
    else puts("NO");
    fclose(stdin);
    fclose(stdout);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值