版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lidengdengter/article/details/81938645
题目和POJ - 2318 TOYS相似,这题要求算出放置同样数目的玩具的隔间数,同时隔板和玩具放置的位置不是按顺序给的,只要排序加map记录个数即可。
#include<cstdio>
#include<cmath>
#include<map>
#include<algorithm>
using namespace std;
const int N=1010;
int ans[N];
map<int,int>p;
struct node{
int U,L;
}bord[N];
bool cmp1(node a,node b){
return a.U<b.U;
}
struct toy{
int x,y;
}toys[N];
bool cmp2(toy a,toy b){
return a.x<b.y;
}
int xmult(int x1,int y1,int x2,int y2){
return x1*y2-x2*y1;
}
int main(){
int n,m,x1,x2,y1,y2,x,y;
while(~scanf("%d",&n),n){
scanf("%d%d%d%d%d",&m,&x1,&y1,&x2,&y2);
for(int i=0;i<n;i++)
scanf("%d%d",&bord[i].U,&bord[i].L);
sort(bord,bord+n,cmp1);
for(int i=0;i<=n;i++) ans[i]=0; //初始化
for(int j=0;j<m;j++)
scanf("%d %d",&toys[j].x,&toys[j].y);
sort(toys,toys+m,cmp2);
for(int j=0,i;j<m;j++){
for(i=0;i<n;i++)
if(xmult(toys[j].x-bord[i].L,toys[j].y-y2,bord[i].U-bord[i].L,y1-y2)<=0)
break; //在里面
ans[i]++;
}
// for(int i=0;i<=n;i++)
// printf("%d: %d\n",i,ans[i]);
// printf("\n");
p.clear();
for(int i=0;i<=n;i++)
p[ans[i]]++;
printf("Box\n");
map<int,int>::iterator it;
for(it=p.begin();it!=p.end();it++)
if(it->first!=0)
printf("%d: %d\n",it->first,it->second);
}
return 0;
}