Herding(链接)
Sample Input
1 4 -1.00 0.00 0.00 -3.00 2.00 0.00 2.00 2.00
Sample Output
2.00
题意:求给出的n个点可以构成最小的三角形面积
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
//定义点
struct point
{
double x;
double y;
}a[110];
//利用叉积求三角形面积 S=1/2ab*sin(C)
double cross(point A,point B,point C)
{
return fabs((B.x - A.x) * (C.y - A.y) - (C.x - A.x) * (B.y - A.y)) / 2;
}
int main()
{
int i,j,k,m,n,t;
scanf("%d",&t);
while(t--)
{
double ans = 1e10;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%lf%lf",&a[i].x,&a[i].y);
}//暴力求解
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
for(k=j+1;k<n;k++)
{
if(cross(a[i],a[j],a[k])<1e-10)
continue;
else if(cross(a[i],a[j],a[k])<ans)
ans = cross(a[i],a[j],a[k]);
}
}
}
if(ans == 1e10)
printf("Impossible\n");
else
printf("%.2lf\n",ans);
}
return 0;
}