Mom and dad have a problem: their child, Reza, never puts his toys away when he is finished playing with them. They gave Reza a rectangular box to put his toys in. Unfortunately, Reza is rebellious and obeys his parents by simply throwing his toys into the
box. All the toys get mixed up, and it is impossible for Reza to find his favorite toys anymore. 

Reza's parents came up with the following idea. They put cardboard partitions into the box. Even if Reza keeps throwing his toys into the box, at least toys that get thrown into different partitions stay separate. The box looks like this from the top:



We want for each positive integer t, such that there exists a partition with t toys, determine how many partitions have t, toys.

Input

The input consists of a number of cases. The first line consists of six integers n, m, x1, y1, x2, y2. The number of cardboards to form the partitions is n (0 < n <= 1000) and the number of toys is given in m (0 < m <= 1000). The coordinates of the upper-left
corner and the lower-right corner of the box are (x1, y1) and (x2, y2), respectively. The following n lines each consists of two integers Ui Li, indicating that the ends of the ith cardboard is at the coordinates (Ui, y1) and (Li, y2). You may assume that
the cardboards do not intersect with each other. The next m lines each consists of two integers Xi Yi specifying where the ith toy has landed in the box. You may assume that no toy will land on a cardboard. 

A line consisting of a single 0 terminates the input.

Output

For each box, first provide a header stating "Box" on a line of its own. After that, there will be one line of output per count (t > 0) of toys in a partition. The value t will be followed by a colon and a space, followed the number of partitions containing
t toys. Output will be sorted in ascending order of t for each box.

Sample Input

4 10 0 10 100 0

20 20

80 80

60 60

40 40

5 10

15 10

95 10

25 10

65 10

75 10

35 10

45 10

55 10

85 10

5 6 0 10 60 0

4 3

15 30

3 1

6 8

10 10

2 1

2 8

1 5

5 5

40 10

7 9

0

Sample Output

Box

2: 5

Box

1: 4

2: 1

多之前的POJ-2318多了一个线段排序,总体难度不大,计算几何的基础题

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; struct point
{
int x,y;
}; struct Line
{
point a,b;
}line[2010]; int toy[2010];
int ans[2010]; bool cmp(Line p,Line q)//线段排序,我是跪着看的,虽然很好懂
{
return min(p.a.x,p.b.x)<min(q.a.x,q.b.x)||((min(p.a.x,p.b.x)==min(q.a.x,q.b.x))&&(max(p.a.x,p.b.x)<max(q.a.x,q.b.x)));
} int cross(point p0,point p1,point p2)
{
return (p1.x-p0.x)*(p2.y-p0.y)-(p1.y-p0.y)*(p2.x-p0.x);//等同于TOYS的ans判断
} void binarysearch(point t,int n)//更喜欢一点这个二分
{
int l=0,r=n-1,mid;
while(l<r)
{
mid=(l+r)>>1;
if(cross(t,line[mid].a,line[mid].b)>0)//在右侧
l=mid+1;
else
r=mid;
}
if(cross(t,line[l].a,line[l].b)<0)//在左侧
toy[l]++;
else
toy[l+1]++;
} int main()
{
//freopen("input.txt","r",stdin);
int n,m,x1,y1,x2,y2;
while(scanf("%d",&n),n)
{
int i,u,l;
scanf("%d%d%d%d%d",&m,&x1,&y1,&x2,&y2);
for(i=0;i<n;i++)
{
scanf("%d%d",&u,&l);
line[i].a.x=u;
line[i].a.y=y1;
line[i].b.x=l;
line[i].b.y=y2;
}
sort(line,line+n,cmp);//此处sort为全题重点 memset(toy,0,sizeof(toy));
memset(ans,0,sizeof(ans)); point t;
for(i=0;i<m;i++)
{
scanf("%d%d",&t.x,&t.y);
binarysearch(t,n);
} for(i=0;i<=n;i++)
ans[toy[i]]++;//ans数组对应存数了 printf("Box\n");
for(i=1;i<=m;i++)
{
if(ans[i])
{
printf("%d: %d\n", i, ans[i]);
m-=i*toy[i];//这一行真的特别优美
}
}
}
return 0;
}

B - Toy Storage(POJ - 2398) 计算几何基础题,比TOYS多了个线段排序的更多相关文章

  1. Toy Storage POJ 2398

    题目大意:和 TOY题意一样,但是需要对隔板从左到右进行排序,要求输出的是升序排列的含有i个玩具的方格数,以及i值. 题目思路:判断叉积,二分遍历 #include<iostream> # ...

  2. (叉积)B - Toy Storage POJ - 2398

    题目链接:https://cn.vjudge.net/contest/276358#problem/B 题目大意:和上一次写叉积的题目一样,就只是线不是按照顺序给的,是乱序的,然后输出的时候是按照有三 ...

  3. POJ 2398 - Toy Storage - [计算几何基础题][同POJ2318]

    题目链接:http://poj.org/problem?id=2398 Time Limit: 1000MS Memory Limit: 65536K Description Mom and dad ...

  4. POJ 2318 - TOYS - [计算几何基础题]

    题目链接:http://poj.org/problem?id=2318 Time Limit: 2000MS Memory Limit: 65536K Description Calculate th ...

  5. poj 1696 (计算几何基础)

    poj 1696 Space Ant 链接:http://poj.org/problem?id=1696 题意:在坐标轴上,给定n个点的 id 以及点的坐标(xi, yi),让你以最底端点开始,从右依 ...

  6. hrbustoj 1142:围困(计算几何基础题,判断点是否在三角形内)

    围困 Time Limit: 1000 MS     Memory Limit: 65536 K Total Submit: 360(138 users) Total Accepted: 157(12 ...

  7. POJ 2398 - Toy Storage 点与直线位置关系

    Toy Storage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5439   Accepted: 3234 Descr ...

  8. POJ 2398 Toy Storage(计算几何,叉积判断点和线段的关系)

    Toy Storage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3146   Accepted: 1798 Descr ...

  9. 简单几何(点与线段的位置) POJ 2318 TOYS && POJ 2398 Toy Storage

    题目传送门 题意:POJ 2318 有一个长方形,用线段划分若干区域,给若干个点,问每个区域点的分布情况 分析:点和线段的位置判断可以用叉积判断.给的线段是排好序的,但是点是无序的,所以可以用二分优化 ...

随机推荐

  1. 解决在Python中使用Win32api报错的问题,No module named win32api

    一.系统环境 操作系统: Win7 64位 Python:3.7.0 二.在使用import win32api时,报错:No module named win32api 网上查到有下面解决办法: 方法 ...

  2. 项目二:品优购 第二天 AngularJS使用 brand商品页面的增删改查

    品优购电商系统开发 第2章 品牌管理 传智播客.黑马程序员 1.前端框架AngularJS入门 1.1 AngularJS简介 AngularJS  诞生于2009年,由Misko Hevery 等人 ...

  3. dataframe 用法总结

    http://pda.readthedocs.io/en/latest/chp5.html data = [] 列表初始化 data = (,) data = {} 字典初始化 data = pd.D ...

  4. 使用 Sentry集中处理错误

    Sentry的简介 Sentry 是一个实时的事件日志和聚合平台,基于 Django 构建. Sentry 可以帮助你将程序的所有 exception 自动记录下来,处理 exception 是每个程 ...

  5. Yii2邮箱发送与配置

    1配置邮箱 在 common/config/web.php中写入以下代码配置 Mail代理 return [ 'components' => [ ...//your code, //以下是 ma ...

  6. 5.python之pip安装模块失败

    本文是篇水文,主要是在学习python过程中总是遇到使用pip安装一些模块失败,记录一下安装模块解决办法 第一种方法: 首先安装wheel模块: pip install wheel 如果wheel都安 ...

  7. 循环删除DataTable.Row中的多行问题

    在C#中,如果要删除DataTable中的某一行,大约有以下几种办法: 1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(ind ...

  8. 泊松分布 & 指数分布

    一.泊松分布 日常生活中,大量事件是有固定频率的. 某医院平均每小时出生3个婴儿 某公司平均每10分钟接到1个电话 某超市平均每天销售4包xx牌奶粉 某网站平均每分钟有2次访问 它们的特点就是,我们可 ...

  9. C++读取txt文件(VS)

    最常用的方法?https://www.cnblogs.com/nkzhangcheng/p/7722568.html https://blog.csdn.net/a125930123/article/ ...

  10. 设计模式11: Flyweight 享元模式(结构型模式)

    Flyweight 享元模式(结构型模式) 面向对象的代价 面向对象很好的解决了系统抽象性的问题,同时在大多数情况下也不会损及系统的性能.但是,在某些特殊应用中,由于对象的数量太大,采用面向对象会给系 ...