HDU 4709 Herding

暴力+精度,精度把我坑了,狠狠的教训啊!

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4709

就是求所有点构成的三角形面积中,最小的面积。

直接上代码,一般控制好精度就没什么问题了。

 1 #include<stdio.h>
 2 #include<iostream>
 3 using namespace std;
 4 #include<queue>
 5 #include<math.h>
 6 #include<algorithm>
 7 #include<string.h>
 8 
 9 #define repA(p,q,i)  for( int (i)=(p); (i)!=(q); ++(i) )
10 #define repAE(p,q,i)  for( int (i)=(p); (i)<=(q); ++(i) )
11 #define repD(p,q,i)  for( int (i)=(p); (i)!=(q); --(i) )
12 #define repDE(p,q,i)  for( int (i)=(p); (i)>=(q); --(i) )
13 #define range 110
14 #define MAXN 4010*4010
15 
16 double x[range],y[range];
17 
18 double area(int i,int j,int k);
19 
20 int main()
21 {
22     int test,n;  scanf("%d",&test);
23     while(test--)
24     {
25         scanf("%d",&n);
26         repA(0,n,i)
27             scanf("%lf%lf",&x[i],&y[i]);
28         double minx = MAXN,s;
29         repA(0,n,i)
30         {
31             repA(i+1,n,j)
32             {
33                 repA(j+1,n,k)
34                 {
35                     s = area(i,j,k) ;
36                     if( s < 1e-6 )  continue;
37                     minx = min(s,minx) ;
38                 }
39             }
40         }
41         if( fabs( minx - MAXN ) < 1e-3 )  printf("Impossible\n");
42         else printf("%.2lf\n",minx);
43     }
44 }
45 
46 double area(int i,int j,int k)
47 {
48     return  fabs( (x[j]-x[i])*(y[k]-y[i]) - (y[j]-y[i])*(x[k]-x[i]) ) / 2 ;
49 }
View Code

 

posted on 2013-09-09 11:32  码农之上~  阅读(151)  评论(0编辑  收藏  举报

导航