欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

神坛 (30 分)(极角排序)

程序员文章站 2022-04-01 11:24:41
...

题目

https://pintia.cn/problem-sets/994805046380707840/problems/994805046577840128

题意

给你若干点 找三个点谁其组成的三角形面积最小

思路

极角排序 遍历每个点和其余所有点向量 极角排序 找的相邻两条线段 求三角形面积

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node
{
    ll x,y;
}po[100005],poo[100005];
bool cmp(node a,node b)
{
    return b.y*a.x > b.x*a.y;
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i = 1;i <= n;i++)
    {
        scanf("%lld%lld",&po[i].x,&po[i].y);
    }
    ll ans = 1e18;
    for(int i = 1;i <= n;i++)
    {
        int p=0;
        for(int j = 1;j <= n;j++)
        {
            if(i == j) continue;
            poo[p].x = po[j].x - po[i].x;
            poo[p].y = po[j].y - po[i].y;
            p++;
        }
        sort(poo,poo+p,cmp);
        for(int j = 1;j < p;j++)
        {
            ans = min(ans,abs(poo[j].y*poo[j-1].x-poo[j].x*poo[j-1].y));
        }
    }
    printf("%.3f\n",ans/2.0);
    return 0;
}