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);
   }
}

 

posted @ 2013-09-09 14:21  814jingqi  阅读(143)  评论(0编辑  收藏  举报