TOYS

Time Limit: 2000MS Memory Limit: 65536K

Description

Calculate the number of toys that land in each bin of a partitioned toy box.

Mom and dad have a problem - their child John never puts his toys away when he is finished playing with them. They gave John a rectangular box to put his toys in, but John 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 John to find his favorite toys.

John’s parents came up with the following idea. They put cardboard partitions into the box. Even if John keeps throwing his toys into the box, at least toys that get thrown into different bins stay separated. The following diagram shows a top view of an example toy box.



For this problem, you are asked to determine how many toys fall into each partition as John throws them into the toy box.

Input

The input file contains one or more problems. The first line of a problem consists of six integers, n m x1 y1 x2 y2. The number of cardboard partitions is n (0 < n <= 5000) and the number of toys is m (0 < m <= 5000). 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 contain two integers per line, Ui Li, indicating that the ends of the i-th cardboard partition is at the coordinates (Ui,y1) and (Li,y2). You may assume that the cardboard partitions do not intersect each other and that they are specified in sorted order from left to right. The next m lines contain two integers per line, Xj Yj specifying where the j-th toy has landed in the box. The order of the toy locations is random. You may assume that no toy will land exactly on a cardboard partition or outside the boundary of the box. The input is terminated by a line consisting of a single 0.

Output

The output for each problem will be one line for each separate bin in the toy box. For each bin, print its bin number, followed by a colon and one space, followed by the number of toys thrown into that bin. Bins are numbered from 0 (the leftmost bin) to n (the rightmost bin). Separate the output of different problems by a single blank line.

Sample Input

5 6 0 10 60 0

3 1

4 3

6 8

10 10

15 30

1 5

2 1

2 8

5 5

40 10

7 9

4 10 0 10 100 0

20 20

40 40

60 60

80 80

5 10

15 10

25 10

35 10

45 10

55 10

65 10

75 10

85 10

95 10

0

Sample Output

0: 2

1: 1

2: 1

3: 1

4: 0

5: 1

0: 2

1: 2

2: 2

3: 2

4: 2

Hint

As the example illustrates, toys that fall on the boundary of the box are “in” the box.

Source

Rocky Mountain 2003

这是一道基础的计算几何,就是让你计算用线段分出的不规则图形的区域中分别有几个点。这题我们直接二分答案,如果点在当前第mid" role="presentation" style="position: relative;">midmid条线段的左边,那么我们移动右指针,否则我们移动左指针。怎么判断方向呢?直接使用向量的叉积来判断就可以了。

代码如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 5005
using namespace std;
struct pot{
    int x,y;
};
struct line{pot a,b;}l[N];
int n,m,cnt[N];
int x1,x2,y1,y2;
inline int cross(pot a,pot b){return a.x*b.y-a.y*b.x;}
inline bool dir(int k,pot p){
    pot a,b;
    a.x=l[k].a.x-p.x,a.y=l[k].a.y-p.y;
    b.x=l[k].b.x-p.x,b.y=l[k].b.y-p.y;
    return cross(a,b)>0;
}
inline int search(pot p){
    int l=1,r=n,ret;
    while(l<=r){
        int mid=(l+r>>1);
        if(dir(mid,p))l=mid+1;
        else r=mid-1;
    }
    return r;
}
int main(){
    while(scanf("%d",&n)){
        if(n==0)break;
        memset(cnt,0,sizeof(cnt));
        scanf("%d%d%d%d%d",&m,&x1,&y1,&x2,&y2);
        for(int i=1;i<=n;++i){
            l[i].a.y=y1,l[i].b.y=y2;
            scanf("%d%d",&l[i].a.x,&l[i].b.x);
        }
        for(int i=1;i<=m;++i){
            pot p;
            scanf("%d%d",&p.x,&p.y);
            ++cnt[search(p)];
        }
        for(int i=0;i<=n;++i)printf("%d: %d\n",i,cnt[i]);
        puts("");
    }
    return 0;
}

2018.07.03 POJ 2318 TOYS(二分+简单计算几何)的更多相关文章

  1. 2018.07.04 POJ 1654 Area(简单计算几何)

    Area Time Limit: 1000MS Memory Limit: 10000K Description You are going to compute the area of a spec ...

  2. 2018.07.04 POJ 3304 Segments(简单计算几何)

    Segments Time Limit: 1000MS Memory Limit: 65536K Description Given n segments in the two dimensional ...

  3. poj 2318 TOYS (二分+叉积)

    http://poj.org/problem?id=2318 TOYS Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 101 ...

  4. 2018.07.03 POJ 2653 Pick-up sticks(简单计算几何)

    Pick-up sticks Time Limit: 3000MS Memory Limit: 65536K Description Stan has n sticks of various leng ...

  5. 2018.07.03 POJ 1279Art Gallery(半平面交)

    Art Gallery Time Limit: 1000MS Memory Limit: 10000K Description The art galleries of the new and ver ...

  6. POJ 2318 TOYS | 二分+判断点在多边形内

    题意: 给一个矩形的区域(左上角为(x1,y1) 右下角为(x2,y2)),给出n对(u,v)表示(u,y1) 和 (v,y2)构成线段将矩形切割 这样构成了n+1个多边形,再给出m个点,问每个多边形 ...

  7. 2018.07.03 POJ 3348 Cows(凸包)

    Cows Time Limit: 2000MS Memory Limit: 65536K Description Your friend to the south is interested in b ...

  8. POJ 2318 TOYS(叉积+二分)

    题目传送门:POJ 2318 TOYS Description Calculate the number of toys that land in each bin of a partitioned ...

  9. poj 2318 叉积+二分

    TOYS Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13262   Accepted: 6412 Description ...

随机推荐

  1. air 桌面应用发布后可以删除的文件

    ****\Adobe AIR\Versions\1.0 下的文件夹Resources,可以整个删除 ***META-INF\AIR目录下的application.xml配置文件可修改initialWi ...

  2. ABAP-动态创建DATABASE/FUNCTION(风险)

    警告:此程序仅供研究,请谨慎操作,切勿对系统标准数据表及功能函数进行测试(可能无法修复). 程序:EWUCINS REPORT EWUCINS MESSAGE-ID US NO STANDARD PA ...

  3. ABAP-BarCode-2-Excel打印二维码

    以前用Excel打印过二维码看板标签,将实现过程备注下. 1.安装控件 安装文件:TBarCodeOffice.exe 2.控件注册 打开Excel,找到[选项] 在打开的界面选择[加载项],在活动应 ...

  4. UI5-文档-4.20-Aggregation Binding

    现在我们已经为我们的应用建立了一个良好的结构,是时候添加更多的功能了.通过添加一些JSON格式的发票数据,我们开始探索数据绑定的更多特性,这些发票数据显示在面板下面的列表中. Preview A li ...

  5. 在eclipse的web项目里面创建jsp时第一行报错

    原因是因为项目里面没有配置tomcat,配置一下tomcat就好了

  6. 利用 setInterval 确定用户的动作是否停止

    最近遇到一个问题,对于某一个持续的动作,希望能够知晓用户何时停止这个动作, 比如说 我们通过注册onresize事件,去监听浏览器窗口变化的事件,在这个事件里面,我们可能要执行大量的计算去确定窗口变化 ...

  7. 利用R求分位数及画出箱型图

    1)数据集 data<-c(75.0,64.0,47.4,66.9,62.2,62.2,58.7,63.5,66.6,64.0,57.0,69.0,56.9,50.0,72.0) 默认是四分位: ...

  8. RN中关于组件中属性的传递

    比如: 组件A想要给组件B中的组件C传递一个属性prop class A extends Component{ render(){ return( <B title = "这是一个标题 ...

  9. 第五章 二叉树(e4)层次遍历

  10. Ubuntu 16.04中VirtualBox 5.1使用U盘/USB设备的方法

    环境: Ubuntu 16.04 LTS VirtualBox 5.1.26 r118224 虚拟机系统:Windows 7 SP1 64 安装扩展: 在这里下载:(自己注意版本好,版本不匹配安装不成 ...