这题其实很简单的,就是找任意三点选出面积最小三角形,手贱把叉乘-写成+小半天没发现。。。,热身赛题目确实有点水哈,让我这样的小白也能独自做一下,倍感欣慰。
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
const double eps=1e-8;
const double INF=100000000.0;
struct point{
double x;
double y;
}p[105];
int dblcmp(double x){//由于精度问题,这里是一个比较模版
if(fabs(x)<eps)
return 0;
return x>0.0?1:-1;
}
double area(point p1,point p2,point p3){
return fabs((p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y))/2;
}
int main(){
int t,n;
scanf("%d",&t);
while(t--){
double ans=INF;
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%lf %lf",&p[i].x,&p[i].y);
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
for(int k=j+1;k<n;k++){
double _area=area(p[i],p[j],p[k]);
if(dblcmp(_area)!=0)ans=min(ans,_area);
}
}
}
if(dblcmp(ans-INF)==0)printf("Impossible\n");
else printf("%.2lf\n",ans);
}
return 0;
}