#define eps 1e-7
struct point
{
double x,y;
}f[100010];
bool cmp1(point a,point b)
{
rt a.y<b.y;
}
bool cmp2(point a,point b)
{
rt a.x*b.y<a.y*b.x;
}
bool check(point a,point b,point c)
{
b.x-=a.x;
b.y-=a.y;
c.x-=a.x;
c.y-=a.y;
rt b.x*c.y>=c.x*b.y;
}
int n,top,s[100010];
int main(){
#ifndef ONLINE_JUDGE
freopen("","r",stdin);
freopen("","w",stdout);
#endif
n=read();
fr(i,1,n)
scanf("%lf%lf",&f[i].x,&f[i].y);
sort(f+1,f+n+1,cmp1);
fd(i,n,1)
f[i].x-=f[1].x,f[i].y-=f[1].y;
sort(f+2,f+n+1,cmp2);
top=1;
s[1]=1;
fr(i,2,n)
{
while(top>2&&check(f[s[top-1]],f[s[top]],f[i]))
top--;
top++;
s[top]=i;
}
double ans=0.0;
fr(i,3,top)
ans+=fabs(f[s[i-1]].x*f[s[i]].y-f[s[i-1]].y*f[s[i]].x);
printf("%lf\n",ans/2);
rt 0;
}
[模板]二维凸包(纯代码)
最新推荐文章于 2022-01-02 12:31:22 发布