您的位置:首页 > 其它

poj 2398 Toy Storage

2015-09-24 17:52 323 查看
题意:和POJ 2318一样,只是中间的n个隔板未排序,输出的是装有i个玩具区域的个数。

POJ 2318:/article/9560899.html

#include"iostream"
#include"cmath"
#include"cstring"
#include"cstdlib"
using namespace std;
#define M 1111
struct node
{
double a,b;
}p[M];
int cmp(const void *a,const void *b)
{
return (*(struct node *)a).a-(*(struct node *)b).a;
}
int main()
{
int n,m;
double x1,x2,y1,y2;
while(scanf("%d",&n),n!=0)
{
scanf("%d",&m);
scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
int i,j;
double k[M],bb[M];
int c[M],f;
int ans[M],cnt[M];
memset(ans,0,sizeof(ans));
memset(c,0,sizeof(c));
memset(k,0,sizeof(k));
memset(bb,0,sizeof(bb));
memset(cnt,0,sizeof(cnt));
for(i=0;i<n;i++) scanf("%lf %lf",&p[i].a,&p[i].b);
qsort(p,n,sizeof(p[0]),cmp);
for(i=0;i<n;i++)
{
if(fabs(p[i].a-p[i].b)>1e-8)
{
k[i]=(y1-y2)/(p[i].a-p[i].b);
bb[i]=y2-k[i]*p[i].b;
}
else
{
c[i]=-1;
bb[i]=p[i].a;
}
}
for(i=0;i<m;i++)
{
double xx,yy;
scanf("%lf%lf",&xx,&yy);
f=0;
for(j=0;j<n;j++)
{
if((c[j]==-1&&xx<bb[j])||(k[j]>0&&xx*k[j]+bb[j]<yy)||(k[j]<0&&xx*k[j]+bb[j]>yy))
{
ans[j]++;
f=1;
break;
}
}
if(f==0)
ans[(int)n]++;
}
for(i=0;i<=n;i++)
cnt[ans[i]]++;
printf("Box\n");
for(i=1;i<=n;i++)
if(cnt[i])
printf("%d: %d\n",i,cnt[i]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: