【Herding HDU – 4709 】【数学(利用叉乘计算三角形面积)】

  • 2019 年 10 月 10 日
  • 筆記

题意:给出n个点的坐标,问取出其中任意点围成的区域的最小值! 很明显,找到一个合适的三角形即可。

#include<iostream>  #include<cstdio>  #include<cstring>  #include<cmath>  #include<cstdlib>  #include<algorithm>  using namespace std;  const int maxn = 100 + 10;  const int INF = 0x3f3f3f3f;  int T, N;  struct Point  {      double _x, _y;  }p[maxn];  double Cross(int A, int B, int C)  {      double ABx = p[B]._x - p[A]._x;      double ABy = p[B]._y - p[A]._y;      double ACx = p[C]._x - p[A]._x;      double ACy = p[C]._y - p[A]._y;      return fabs(ABx*ACy - ABy*ACx) / 2.0;  }  int main()  {      // freopen("input.txt", "r", stdin);      // freopen("output.txt", "w", stdout);      scanf("%d", &T);      while(T--)      {          scanf("%d", &N);          for(int i = 0; i < N; i++)              scanf("%lf %lf", &p[i]._x, &p[i]._y);          double minn = INF;          for(int i = 0; i < N; i++)              for(int j = i + 1; j < N; j++)                  for(int k = j + 1; k < N; k++)                  {                      double s = Cross(i, j, k);                      if(s <= 1e-7)                          continue;                      minn = min(minn, s);                  }          if(fabs(minn - INF) < 1e-6)              printf("Impossiblen");          else              printf("%.2lfn", minn);      }  }