Serious

来源:互联网 发布:trackpad windows 编辑:程序博客网 时间:2024/05/21 10:20
  小胖非常喜欢serious哥哥,每天都想跟serious哥哥玩。可是小胖非常懒,以至于每每都要serious哥哥来找他。serious哥哥非常友爱,于是天天去找小胖。可是,他们之间有一道障碍(姑且看作是一面墙),不能肉身穿过。于是,你能够帮助serious哥哥找到去找小胖的最短距离吗?

Input

输入数据有两部分。首先是数据组数T(T<100),接下来是T组数据。
每组数据占一行,包含8个整数-100<x_p,y_p,x_s,y_s,x_q1,y_q1,x_q2,y_q2<100,分别代表小胖的坐标、serious哥哥的坐标,以及障碍的两端的坐标。
虽然不科学,但是小胖和serious哥哥可以看做是点,墙可以看做是线段(厚度不计)。
另外,墙一定在两人中间,即至少有一点在小胖和serious哥哥坐标的连线上。

Output

对于每组数据,输出一行,包含一个实数,表示serious哥哥到小胖的最短距离,保留3位小数。

Sample Input

10 0 2 0 1 1 1 -1

Sample Output

2.828
解题报告
又是一题水题。。。
就是简单的运用四次两点间的距离公式,比较下大小。。。
#include<stdio.h>#include<math.h>int main (){    int i,n;    int x1,y1,x2,y2,s1,s2,b1,b2;    double ss1,ss2,ssss1,ssss2,s,ss,t,sss;    scanf("%d",&n);    while(n--)    {        scanf("%d%d%d%d%d%d%d%d",&b1,&b2,&s1,&s2,&x1,&y1,&x2,&y2);        ss1=sqrt((b1-x1)*(b1-x1)+(b2-y1)*(b2-y1))+sqrt((s1-x1)*(s1-x1)+(s2-y1)*(s2-y1));        ss2=sqrt((b1-x2)*(b1-x2)+(b2-y2)*(b2-y2))+sqrt((s1-x2)*(s1-x2)+(s2-y2)*(s2-y2));        if(ss1>ss2)        t=ss2;        else t=ss1;        printf("%.3lf\n",t);    }    return 0;}


0 0
原创粉丝点击