SP22 Triangle From Centroid
Luogu 链接
SPOJ 链接
Virtual Judge 链接
题意
题目描述
已知一三角形的一条边长 \(a\) 和 该三角形重心到 \(a\)、\(b\)、\(c\) 三条边的距离 \(h_a\)、\(h_b\)、\(h_c\),求三角形的面积 \(S\) 和其重心与垂心的距离 \(d\)。
输入格式
多测,第一行一个正整数 \(T\)(\(T\) 在 \(1000\) 左右),代表组数。
接下来每一行四个实数 \(a\)、\(h_a\)、\(h_b\)、\(h_c\),含义见题目描述。
输出格式
对于每组数据,输出 \(S\) 和 \(d\)(保留三位小数),含意见题目描述。
思路

程序
#include<cstdlib>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cstdio>
#include<iostream>
#include<vector>
#include<map>
#include<cmath>
#include<iomanip>
#include<string>
#include<stack>
#define ll long long
#define ull unsigned long long
#define ld long double
#define INF 0x3f3f3f3f
#define ls rt<<1
#define rs rt<<1|1
#define lb(x) ((x)&(-(x)))
#define pb push_back
using namespace std;
//const int N=3000+1;
//#define use_file
#define more_test
//#define need_init
#ifdef more_test
int T;
#endif
ld a,ha,hb,hc;
ld b,c,S,A,B,C,H,Ox,Oy,Hx,Hy,d;
void SOLVE(/*int test_id*/){
scanf("%Lf%Lf%Lf%Lf",&a,&ha,&hb,&hc);
b=a*ha/hb;
c=a*ha/hc;
S=3*a*ha/2;
A=3*ha;
B=sqrt(c*c-A*A);
C=sqrt(b*b-A*A);
if(fabs(B+C-a)>1e-6)B=-B;
H=B*C/A;
Ox=(C-B)/3,Oy=A/3;
Hx=0,Hy=H;
d=sqrt((Hx-Ox)*(Hx-Ox)+(Hy-Oy)*(Hy-Oy));
printf("%.3Lf %.3Lf\n",S,d);
}
/*
Input:
Output:
*/
int main(){
#ifdef use_file
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
#endif
#ifdef need_init
init();
#endif
#ifdef more_test
scanf("%d",&T);
for(int i=1;i<=T;++i)SOLVE(/*i*/);
#else
SOLVE();
#endif
return 0;
}

浙公网安备 33010602011771号