神坛 (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;
}
上一篇: J2SE中的序列化之继承_MySQL