【模板】极角排序

bool cmp(Point a,Point b) //顺时针方向排列 
{
    return a.x*b.y>a.y*b.x;
}
顺时针排序
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define N 5005
struct Point
{
    LL x,y;
}a[N],b[N];
bool cmp(Point a,Point b) //顺时针方向排列 
{
    return a.x*b.y>a.y*b.x;
}
int main()
{
    ios::sync_with_stdio(false);
    int n,m,k;
    LL Min=1e18;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].x>>a[i].y;
    }
    for(int i=1;i<=n;i++)
    {
        k=0;
        for(int j=1;j<=n;j++)
        {
            if(i!=j) 
            {
                k++;
                b[k].x=a[j].x-a[i].x;
                b[k].y=a[j].y-a[i].y; 
            }
        }
        sort(b+1,b+1+k,cmp);
        for(int j=2;j<=k;j++) Min=min(Min,(b[j].y*b[j-1].x-b[j].x*b[j-1].y));
    }
    printf("%.3f\n",Min*1.0/2);
} 
三个点求最小面积

 

posted @ 2019-01-27 21:39  Dorom  阅读(322)  评论(0)    收藏  举报