太菜啦,这都不会。。。
点到海的距离是点到海的最小距离,然后想让这个值最大。想到了啥?不就是应该用二分吗?太菜了。
把这个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;