牛栓绳

Posted lingr7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛栓绳相关的知识,希望对你有一定的参考价值。

牛栓绳

半个月之前Alice买了一些竹竿,现在又买了一头牛。Alice为了防止牛逃跑,用竹竿做一根拴牛的桩子,并用一条绳子把牛拴在桩上。这条绳子不能太长,不然牛可能进到Alice的矩形庄稼地里吃掉农作物。所以Alice要把拴牛绳剪成合适的长度。

在坐标系中,坐标(x,y)表示拴牛桩的位置。用左下角顶点(x1,y1)和右上角顶点 (x2,y2)所围矩形表示Alice的庄稼地。给出三个坐标,分别表示拴牛桩、庄稼地左下角、庄稼地右上角的位置,请你计算使牛不能进入庄稼地的拴牛绳最大长度。
输出允许误差0.01

数据输入

6个以空格分开的整数,分别表示 x y x1 y1 x2 y2

所有输入数字都是[-999,999]范围内的整数.
题目保证x1≤x2 且y1≤y2
题目保证栓牛桩不在矩形庄稼的区域内

数据输出

输出格式
输出只有一行,一个浮点数表示拴牛绳的最大长度

样例1

输入样例

7 3 0 0 5 4

输出样例

2.0

样例2

输入样例

6 0 0 2 7 6

输出样例

2.0

样例3

输入样例
3 -4 -3 -1 -1 2
输出样例
5.0

代码

#include<bits/stdc++.h>
using namespace std;
#define MAXN 100
#define eps 1e-8
#define zero(x)(((x)>0?(x):-(x))<eps)

struct point{
    double x,y;
};
struct line{
    point a,b;
};
double xmult(point p1,point p2, point p0){
    return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
} 
double distance(point p1, point p2){//两点之间的距离 
    return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));//绝对值 
}
double disptoline(point p, line l){//点到直线的距离 
    return fabs(xmult(p,l.a,l.b))/distance(l.a,l.b);
} 
int main(void){
    point t,a,b,c,d;
    double dis_temp=0.0,dis=0.0;
    cin>>t.x>>t.y>>a.x>>a.y>>c.x>>c.y;
    d.x=a.x;
    d.y=c.y;
    b.x=c.x;
    b.y=a.y;
//  line dvjc={a,c};
//  dis=disptoline(d, dvjc);
//  dis_temp=disptoline(t, dvjc);
    if(a.x<=t.x && t.x<=c.x)
        dis=min(fabs(t.y-a.y),fabs(t.y-c.y));
    else if(a.y<=t.y && t.y<=c.y)
        dis=min(fabs(t.x-a.x),fabs(t.x-c.x));
    else if(t.x<a.x){
        if(t.y>c.y)
            dis=distance(t,d);
        else
            dis=distance(t,a);
    }
    else {
        if(t.y>c.y)
            dis=distance(t,c);
        else 
            dis=distance(t,b);
    }
    printf("%.1f",dis);
    return 0;
}

以上是关于牛栓绳的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数