一开始用暴力求解只能通过前三个点,改了一下,用三角形万能公式,然后对点进行极角大小的排序。只要求点与相邻两点组成的三角形面积就好惹~(最好不要用cin和cout。。会超时)
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=50010;
int n;
struct node{
long long x,y;
}p[N],temp[N];
bool cmp(node a,node b) {
return b.y*a.x>a.y*b.x;
}
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++) {
scanf("%lld %lld",&p[i].x,&p[i].y);
}
double ans=pow(10,18)/2;
for(int i=1;i<=n;i++) {
int t=1;
for(int j=1;j<=n;j++) {
if(i==j) continue;
temp[t].x=p[j].x-p[i].x;
temp[t].y=p[j].y-p[i].y;
t++;
}
sort(temp+1,temp+t,cmp);
for(int j=1;j<t-1;j++){
ans=min(ans,(temp[j].x*temp[j+1].y-temp[j+1].x*temp[j].y)*0.5);
}
}
printf("%.3f",ans);
return 0;
}