半平面的交,二分法(离海最远的点,LA 3890)

这篇博客探讨了如何利用二分法解决找到位于n个点构成的凸多边形岛屿中,离海最远点的问题。通过将凸多边形视为n个半平面的交集,博主提出二分距离并检查在特定距离下是否存在远离海洋的点,通过移动半平面的边界来判断交集是否为空,从而确定最远距离。
摘要由CSDN通过智能技术生成

太菜啦,这都不会。。。

点到海的距离是点到海的最小距离,然后想让这个值最大。想到了啥?不就是应该用二分吗?太菜了。


把这个n个点的凸多边形的岛看做n个半平面的交。

二分距离,检查是否存在一个距离海这么远的点,具体做法就是将所有半平面对应的直线往左边移动这么远,然后看看交是否为空即可。


代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 110;

struct Point
{
    double x,y;
    Point(double x=0,double y=0):x(x),y(y){}
};

typedef Point Vector;

const double eps = 1e-10;
int dcmp(double x)
{
    if(fabs(x)<eps) return 0;
    else return x<0?-1:1;
}

Point operator + (Point p,Vector v)
{
    return Point(p.x+v.x,p.y+v.y);
}

Vector operator - (Point A,Point B)
{
    return Vector(A.x-B.x,A.y-B.y);
}

Vector operator * (Vector V,double t)
{
    return Vector(V.x*t,V.y*t);
}

Vector operator / (Vector V,double t)
{
    return Vector(V.x/t,V.y/t);
}

double Dot(Vector A,Vector B)
{
    return A.x*B.x+A.y*B.y;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值