题目
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;
}
通过极角排序算法寻找平面上三点组合成的最小面积三角形。该算法先选择一个点作为基准,然后计算其余各点相对此基准点的极角并进行排序,遍历排序后的点以找到两个相邻点与基准点形成的最小面积三角形。
223

被折叠的 条评论
为什么被折叠?



