hdu4353 Finding Mine三角形内的点数

http://acm.hdu.edu.cn/showproblem.php?pid=4353

题意:

  求多边形面积和这个多边形内的金矿数的比值的最小值。

  当xi<xj<xk时:

  三角形内的点数=|ik上方的点-(ij上方的点+jk上方的点)|

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 using namespace std;
 5 const int Ni = 205;
 6 const int Mi = 505;
 7 int n,m;
 8 double mx;
 9 struct node{
10     int x,y;//注意数据的范围,是否超int
11     bool operator < (const node &a) const
12     {
13         return x<a.x;
14     }
15 }a[Ni],b[Mi];
16 int sum[Ni][Ni];
17 inline double fabs(double a)
18 {
19     if(a>1e-8) return a;
20     if(-a>1e-8) return -a;
21     return 0;
22 }
23 bool cross(int i,int j,int k)
24 {
25     if(0<(a[j].x-a[i].x)*(b[k].y-a[i].y)-(a[j].y-a[i].y)*(b[k].x-a[i].x))
26         return 1;
27     else return 0;
28 }
29 inline int area(int i,int j,int k)
30 {
31     return (a[j].x-a[i].x)*(a[k].y-a[i].y)-(a[j].y-a[i].y)*(a[k].x-a[i].x);
32 }
33 inline bool judge(int i,int j,int k)
34 {
35     if(a[i].x<b[k].x&&b[k].x<=a[j].x){
36         if(cross(i,j,k)) return 1;
37     }
38     return 0;
39 }
40 void finds()
41 {
42     int i,j,k;
43     for(i=0;i<n;i++)
44     for(j=i+1;j<n;j++)
45     {
46         sum[i][j]=0;
47         for(k=0;k<m;k++) if(judge(i,j,k))
48             sum[i][j]++;
49     }
50     mx=1<<27;
51     for(i=0;i<n;i++)
52     for(j=i+1;j<n;j++)
53     for(k=j+1;k<n;k++)
54     {
55         int ans=sum[i][k]-sum[i][j]-sum[j][k];
56         double s=area(i,j,k);
57         if(ans&&(s=fabs(s/ans))<mx)
58         {
59              mx=s;
60         }
61     }
62 }
63 int main()
64 {
65     int cs=1,tcs,i;
66     scanf("%d",&tcs);
67     while(tcs--)
68     {
69         scanf("%d%d",&n,&m);
70         for(i=0;i<n;i++) scanf("%d%d",&a[i].x,&a[i].y);
71         sort(a,a+n);
72         for(i=0;i<m;i++) scanf("%d%d",&b[i].x,&b[i].y);
73         finds();
74         if(mx!=1<<27)
75             printf("Case #%d: %lf\n",cs++,mx/2);
76         else
77             printf("Case #%d: -1\n",cs++);
78     }
79     return 0;
80 }

 

posted @ 2012-08-25 09:16  qijinbiao1  阅读(279)  评论(0编辑  收藏  举报