空降题目处(外网)
点我点我点我
空降题目处(内网)
点我点我点我
Description
给定三个点(不共线)的坐标,要求以这三个点为圆心做三个圆,圆两两不相交,不包含,问三个圆的直径和最大为多少。
Input
第一行为测试数据组数t。接下来t行每行6个数为坐标。
Output
T行,每行一个整数表示直径和(取下整)。
Solution
若直径和要尽量大,则三圆应尽量贴合,即求三点所成三角形周长,不予证明。(自行脑补)
Code
C++
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int t;
long long x[4],y[4];
long long sqr(long long x)
{
return x*x;
}
int main()
{
scanf("%d",&t);
for (int i=1;i<=t;i++)
{
for (int j=1;j<=3;j++)
{
scanf("%lld%lld",&x[j],&y[j]);
}
printf("%lld\n",(long long)(sqrt(sqr(x[1]-x[2])+sqr(y[1]-y[2]))+sqrt(sqr(x[3]-x[2])+sqr(y[3]-y[2]))+sqrt(sqr(x[1]-x[3])+sqr(y[1]-y[3]))));
}
}
Pascal
var
t,i,j:longint;
x,y:array [1..3] of double;
begin
readln(t);
for i:=1 to t do
begin
for j:=1 to 3 do
read(x[j],y[j]);
writeln(trunc(sqrt(sqr(abs(x[1]-x[2]))+sqr(abs(y[1]-y[2])))+sqrt(sqr(abs(x[3]-x[2]))+sqr(abs(y[3]-y[2])))+sqrt(sqr(abs(x[1]-x[3]))+sqr(abs(y[1]-y[3])))));
end;
end.