极角排序加暴力,但是注意如果直接用 double 会被卡精度,要用 ll 之后转一下
枚举相邻向量构成面积
O ( n^2 * logn )
#include<bits/stdc++.h>
using namespace std;
const int maxn=5005;
#define ll long long int
struct node
{
ll x,y;
}p[maxn];
vector<node>v;
inline bool cmp(node a,node b){return b.y*a.x>a.y*b.x;}
int main()
{
int n; scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%lld%lld",&p[i].x,&p[i].y);
double ans=1e18;
for(int i=1;i<=n;i++)
{
v.clear();
for(int j=1;j<=n;j++)
{
if(i==j)continue;
node te;
te.x=p[j].x-p[i].x;
te.y=p[j].y-p[i].y;
v.push_back(te);
}
sort(v.begin(), v.end(), cmp);
for(int j=0;j<v.size()-1;j++)
ans = min(ans, (v[j].x*v[j+1].y-v[j+1].x*v[j].y)*0.5);
}
printf("%.3f",ans);
return 0;
}