您的位置:首页 > 其它

Toy Storage--POJ2398(计算几何)

2016-04-18 21:02 381 查看
http://poj.org/problem?id=2398

这道题和上一道TOYS是一样的 就是输出不一样 还有就是这个给的是乱序 你要先对挡板排序

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <math.h>
#include <ctype.h>

using namespace std;
#define memset(a,b) memset(a,b,sizeof(a))
#define N 5500
typedef long long  ll;

struct node
{
int x, y, v;
}p
,u
;
int y2;

int cmp(const void *a,const void *b)
{
struct node *c, *f;
c=(struct node *)a;
f=(struct node *)b;
return c->x-f->x;
}

int Find(int nx,int ny,int l,int r)
{
if(l==r-1)
return l;
int mid=(l+r)/2;
node d;
d.x=nx-p[mid].v;
d.y=ny-y2;
if((d.x*p[mid].y)-(d.y*p[mid].x)>0)
{
l=mid;
r=r;
return Find(nx,ny,l,r);
}
else if((d.x*p[mid].y)-(d.y*p[mid].x)<0)
{
l=l;
r=mid;
return Find(nx,ny,l,r);
}
return 0;
}

int main()
{
int n,m,x1,x2,y1,a
;
while(scanf("%d",&n),n)
{
memset(a,0);
scanf("%d %d %d %d %d",&m,&x1,&y1,&x2,&y2);
p[0].x=x1;
p[0].y=y2;
p[0].v=x1;
for(int i=1;i<=n;i++)
{
scanf("%d %d",&u[i].x,&u[i].y);
}
qsort(u+1,n,sizeof(u[0]),cmp);
for(int i=1;i<=n;i++)
{
p[i].x=u[i].x-u[i].y;
p[i].y=y1-y2;
p[i].v=u[i].y;
}
p[n+1].x=x2;
p[n+1].y=y1;
p[n+1].v=x2;
int k,v;
for(int i=0;i<m;i++)
{
scanf("%d %d",&k,&v);
int aa=Find(k,v,0,n+1);
a[aa]++;
}
int ans
;
memset(ans,0);
for(int i=0;i<=n;i++)
{
if(a[i])
{
ans[a[i]]++;
}
}
printf("Box\n");
for(int i=1;i<=n;i++)
{
if(ans[i])
printf("%d: %d\n",i,ans[i]);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: