pku 2398[计算几何]

pku 2398[计算几何]

//和2318差不多,只是输入的board是无序的,输出是玩具数为t(>0)的箱子数(>0)

#include < iostream >
#include
< stdlib.h >
using   namespace  std;
#define  MAXN 5000+1
#define  eps 1e-8
#define  _sign(x) ((x)>eps?1:((x)<-eps?2:0))

struct  point {int x,y;} ;
struct  line {point a,b;} ;

int  ans[MAXN];
line board[MAXN];

double  xmult(point p0,point p1,point p2) {//叉积,囧
    return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}

int  cmp( const   void   * a, const   void   * b)
{
    line 
*aa=(line*)a,*bb=(line*)b;
    
if(aa->a.x == bb->a.x) 
        
return aa->b.x - bb->b.y;
    
else return aa->a.x - bb->a.x;
}

int  main()
{
    
int n,m,x1,y1,x2,y2,u1,u2,i;
    point toys;
    
while(scanf("%d",&n)!=EOF && n )
    
{
        memset(ans,
0,sizeof(ans));
        scanf(
"%d%d%d%d%d",&m,&x1,&y1,&x2,&y2);
        
for(i=0;i<n;i++)
        
{
            scanf(
"%d%d",&u1,&u2);
            board[i].a.x
=u1;
            board[i].a.y
=y1;
            board[i].b.x
=u2;
            board[i].b.y
=y2;
        }

        qsort(board,n,
sizeof(board[0]),cmp);
        board[n].a.x
=x2;
        board[n].a.y
=y1;
        board[n].b.x
=x2;
        board[n].b.y
=y2;
        
for(i=0;i<m;i++)
        
{
            scanf(
"%d%d",&(toys.x),&(toys.y));
            
int low=0,hig=n,mid;
            
while(low+1<hig)
            
{
                mid
=(low+hig)>>1;
                
double res=xmult(board[mid].a,board[mid].b,toys);
                
if(res>0) low=mid;
                
else hig=mid;
            }

            
if(xmult(board[low].a,board[low].b,toys)<0) ans[low]++;
            
else  ans[low+1]++;
        }

        printf(
"Box\n");
        
int t=1,c;
        
for(t=1;t<=m;t++)
        
{
            
for(i=0,c=0;i<=n;i++)
            
{
                
if(ans[i]==t) 
                
{
                    c
++;
                    ans[i]
=0;
                }

            }

            
if(c>0)
                printf(
"%d: %d\n",t,c);
            m
=m-c*t;
        }

        
    }

    
return 0;
}

你可能感兴趣的:(pku 2398[计算几何])