Triangle

来源:互联网 发布:php 统计图 编辑:程序博客网 时间:2024/05/22 14:05

题目连接:  http://acm.fafu.edu.cn/status.php


题目大意: 给定一个三角形,画一条线段,把三角形分成面积相等的两个部分,求最小的划分线段。

取出三角形最长的边和此长的边,在这两边上各取一个点,组成等腰三角行。这样才能保证划分的线段最短。


代码:

/*
 * 1002.cpp
 *
 *  Created on: 2015年11月24日
 *      Author: lenovo
 */
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
#include<iostream>
#include<string>
#include<algorithm>
#include<queue>
using namespace std;
double dis(double x,double y,double x1,double y1)
{
x=x1-x;
y=y1-y;
return sqrt(x*x+y*y);
}


int main()
{
int T,t=0;
double ans;
double ax,ay,bx,by,cx,cy,a,b,c;
scanf("%d",&T);
while(T--)
{

scanf("%lf%lf%lf%lf%lf%lf",&ax,&ay,&bx,&by,&cx,&cy);
a=dis(ax,ay,bx,by);
b=dis(ax,ay,cx,cy);
c=dis(bx,by,cx,cy);
if(a>b)
swap(a,b);
if(a>c)
swap(a,c);
double s,p;
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
double sin = 2*s/b/c;
double a1=sqrt(s/sin);
double cos=sqrt(1-sin*sin);
ans=sqrt(2*a1*a1-2*a1*a1*cos);
printf("%.4lf\n",ans);
}
return 0;
}


0 0