求个凸包,然后在凸包上求:
时间复杂度大概是 O(nlogn+n):
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<map>
#include<vector>
#define ll long long
#define llu unsigned ll
using namespace std;
const double eps=1e-8;
const double dnf=1e20;
const double pi=acos(-1.0);
const int maxp=51010;
struct Point
{
int x,y;
Point(){
}
Point(int xx,int yy)
{
x=xx,y=yy;
}
void input(void)
{
scanf("%d%d",&x,&y);
}
void output(void)
{
printf("%d %d\n",x,y);
}
bool operator == (const Point &b) const
{
return x==b.x&&y==b.y;
}
bool operator < (const Point &b) const
{
if(x!=b.x) return x<b.x;
else return y<b.y;
}
Point operator + (const Point &b) const
{
return Point(x+b.x,y+b.y);
}
Point operator - (const Point &b) const
{
return Point(x-b.x,y-b.y);
}