标签:
hduoj 4706 Children's Day 2013 ACM/ICPC Asia Regional Online —— Warmup
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2005 Accepted Submission(s): 563
分析:
题意是在N棵树中选出M棵围成的区域面积最小。
换句话说就是求在一堆笛卡尔坐标中选出三个点组成的面积最小。
AC代码:
1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #include<queue> 5 #include<iostream> 6 #include<stack> 7 #include<map> 8 #include<cmath> 9 #include<string> 10 using namespace std; 11 #define N 1000000 12 struct Point{ 13 double x; 14 double y; 15 }point[110]; 16 double area2(double x0, double y0 , double x1, double y1, double x2, double y2) 17 { 18 return fabs(x0*y1+x2*y0+x1*y2-x2*y1-x0*y2-x1*y0); 19 } 20 int main(){ 21 int n; 22 int tcase; 23 scanf("%d", &tcase); 24 while(tcase--){ 25 double minn = 10000005; 26 bool flag = false; 27 scanf("%d", &n); 28 for(int i = 0; i < n; i++){ 29 scanf("%lf%lf", &point[i].x, &point[i].y); 30 } 31 if(n >= 3){ 32 for(int i = 0; i < n-2; i++){ 33 for(int j = i+1; j < n-1; j++){ 34 for(int k = j+1; k < n; k++){ 35 double x1, x2, x3, y1, y2, y3; 36 x1 = point[i].x; y1 = point[i].y; 37 x2 = point[j].x; y2 = point[j].y; 38 x3 = point[k].x; y3 = point[k].y; 39 double num = area2(x1, y1, x2, y2, x3, y3); 40 num /= 2.0; 41 if(num < minn && num != 0){ 42 minn = num; 43 flag = true; 44 } 45 } 46 } 47 } 48 } 49 if(flag) 50 printf("%.2lf\n", minn); 51 else 52 printf("Impossible\n"); 53 } 54 return 0; 55 }
hduoj 4706 Herding 2013 ACM/ICPC Asia Regional Online —— Warmup
标签:
原文地址:http://www.cnblogs.com/jeff-wgc/p/4466972.html