poj 2398 Toy Storage

来源:互联网 发布:剑网三dbm数据那个好 编辑:程序博客网 时间:2024/09/21 08:58

题意:和POJ 2318一样,只是中间的n个隔板未排序,输出的是装有i个玩具区域的个数。

POJ 2318:http://blog.csdn.net/veritaswu/article/details/48714237

#include"iostream"#include"cmath"#include"cstring"#include"cstdlib"using namespace std;#define M 1111struct 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;}


0 0