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\)(保留三位小数),含意见题目描述

思路

程序

AC 记录

#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;
}
posted @ 2025-03-31 21:10  LXcjh4998  阅读(13)  评论(0)    收藏  举报