hdu 4709 herding 2013 杭电warm up 1004
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4709
可以证明,三角形是最小的。
直接计算三角形面积,取最小的的,Impossible的情况特判就行。
计算三角形面积用向量叉积。
代码:
#include<iostream> #include<algorithm> #include<cmath> #include<vector> #include<cstdio> using namespace std; struct point { double x; double y; }; double area(point A,point B,point C) { double abx=B.x-A.x; double aby=B.y-A.y; double acx=C.x-A.x; double acy=C.y-A.y; double ans=(abx*acy-acx*aby)/2; return fabs(ans); } int main() { int T; int n; cin>>T; while(T--) { cin>>n; point p[n]; double x,y; for(int i=0;i<n;i++) { scanf("%lf %lf",&x,&y); p[i].x=x; p[i].y=y; } vector<double> v; for(int i=0;i<n;i++) for(int j=i+1;j<n;j++) for(int k=j+1;k<n;k++) { v.push_back(area(p[i],p[j],p[k])); } sort(v.begin(),v.end()); double ans=0; for(int i=0;i<v.size();i++) if(v[i]!=0) { ans=v[i]; break; } if(ans==0) cout<<"Impossible"<<endl; else printf("%.2lf\n",ans); } }