HDU 4709 Herding
这道题可能会卡在精度上。
题目链接:http://code.hdu.edu.cn/showproblem.php?pid=4709
题意就是给你N个点,求能组成的最小三角形面积。
数据量比较小,可以用枚举,但是求面积之前要注意判断是否三点共线。
上代码:
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 }
To Be The Best Of Yourself