[Jzoj] 1765. Circle

题目大意

给定三个点(不共线)的坐标,要求以这三个点为圆心做三个圆,圆两两不相交,不包含,问三个圆的直径和最大为多少。

题目解析

三个点不共线,则为三角形。
先做出三角形的内切圆,与三角形三边有三个切点,分别为 E , F , G E,F,G E,F,G
根据切线长定理,可以知道 B F = B E , A F = A G , C G = C E BF=BE,AF=AG,CG=CE BF=BE,AF=AG,CG=CE
以三点为圆心,切线长为半径作出三个圆,显然是不相交的三个圆。
综上所述,三个圆的直径和 = B F + B E + A F + A G + C G + C E = A B + A C + B C =BF+BE+AF+AG+CG+CE=AB+AC+BC =BF+BE+AF+AG+CG+CE=AB+AC+BC,即三角形周长。
所以这道题就是求三角形的周长,根据两点间距离公式(勾股定理),求出三条边长。
注意:可能边长会是小数,注意精度问题

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int t;
double ans,x[5],y[5];
double fun(double a,double b) {return a*a+b*b;}
int main()
{
	cin>>t;
	while(t--)
	{
	  for(int i=1;i<=3;i++) cin>>x[i]>>y[i];
	  ans=sqrt(fun(x[1]-x[2],y[1]-y[2]))+sqrt(fun(x[1]-x[3],y[1]-y[3]))+sqrt(fun(x[2]-x[3],y[2]-y[3]));
	  cout<<(int)ans<<endl;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值