TOYS
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 10666   Accepted: 5128

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.
题意:给出一个长方形槽,然后从左到右给出n个隔板,把该长方形槽分成n+1个空间,n个隔板互不交叉,最后给出m个小球,随机给出,保证每个小球不在外部和隔板上;问每个空间有多少个小球?(如果不是按照顺序给出的,按照x排序即可,因为互补交叉)
分析;因为隔板是按照顺序给出的,那么对于每个小球二分隔板,用叉乘判断点在线段的位置,枚举答案即可:
#include"string.h"
#include"stdio.h"
#include"iostream"
#include"algorithm"
#include"queue"
#include"stack"
#define M 5009
#define N 100009
#include"stdlib.h"
#include"math.h"
#define inf 10000000000000000LL
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define eps 1e-10
using namespace std;
struct node
{
double x,y;
node(){}
node(double _x,double _y):x(_x),y(_y){}
node operator +(node p)
{
return node(x+p.x,y+p.y);
}
node operator -(node p)
{
return node(x-p.x,y-p.y);
}
double operator *(node p)
{
return x*p.y-y*p.x;
}
double operator ^(node p)
{
return x*p.x+y*p.y;
}
}p[M],k[M];
int n;
int cmp(node a,node b)
{
return a.x<b.x;
}
double len(node a)
{
return sqrt(a^a);
}
double dis(node a,node b)
{
return len(b-a);
}
double cross(node a,node b,node c)
{
return (b-a)*(c-a);
}
double dot(node a,node b,node c)
{
return (b-a)^(c-a);
}
int fun(node p,node *q)
{
double rad=0;
for(int i=1;i<=4;i++)
{
rad+=acos(dot(p,q[i-1],q[i%4])/dis(p,q[i-1])/dis(p,q[i%4]));
}
if(fabs(rad-PI*2)<eps)
return 1;
else
return 0;
}
int s[M],vis[M];
int main()
{
double x1,x2,y1,y2;
int n,m,i,kk=0;
while(scanf("%d",&n),n)
{
scanf("%d%lf%lf%lf%lf",&m,&x1,&y1,&x2,&y2);
k[n+1]=node(x2,x2);
for(i=1;i<=n;i++)
scanf("%lf%lf",&k[i].x,&k[i].y);
memset(s,0,sizeof(s));
for(i=1;i<=m;i++)
{
scanf("%lf%lf",&p[i].x,&p[i].y);
int l=1,r=n+1,mid;
int fuck;
while(l<=r)
{
mid=(l+r)/2;
node p1(k[mid].y,y2);
node p2(k[mid].x,y1);
if(cross(p1,p2,p[i])>0)
{
fuck=mid;
r=mid-1;
}
else
{
l=mid+1;
} }
s[fuck-1]++;
}
if(kk)
printf("\n");
kk++;
for(i=0;i<=n;i++)
printf("%d: %d\n",i,s[i]);
}
}

几何+点与线段的位置关系+二分(POJ2318)的更多相关文章

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

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

  2. Segments---poj3304(判断直线与线段的位置关系)

    题目链接:http://poj.org/problem?id=3304 题意:给你n个线段,求是否有一条直线与所有的线段都相交,有Yes,没有No; 枚举所有的顶点作为直线的两点,然后判断这条直线是否 ...

  3. POJ-2318 TOYS 计算几何 判断点在线段的位置

    题目链接:https://cn.vjudge.net/problem/POJ-2318 题意 在一个矩形内,给出n-1条线段,把矩形分成n快四边形 问某些点在那个四边形内 思路 二分+判断点与位置关系 ...

  4. 平面内,线与线 两条线找交点 两条线段的位置关系(相交)判定与交点求解 C#

    个人亲自编写.测试,可以正常使用   道理看原文,这里不多说   网上找到的几篇基本都不能用的   C#代码 bool Equal(float f1, float f2) { return (Math ...

  5. Cupid's Arrow---hdu1756(判断点与多边形的位置关系 模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1756 题意:中文题,套模板即可: /* 射线法:判断一个点是在多边形内部,边上还是在外部,时间复杂度为 ...

  6. LightOj1190 - Sleepwalking(判断点与多边形的位置关系--射线法模板)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1190 题意:给你一个多边形含有n个点:然后又m个查询,每次判断点(x, y)是否在多边 ...

  7. 【bzoj2402】陶陶的难题II 分数规划+树链剖分+线段树+STL-vector+凸包+二分

    题目描述 输入 第一行包含一个正整数N,表示树中结点的个数.第二行包含N个正实数,第i个数表示xi (1<=xi<=10^5).第三行包含N个正实数,第i个数表示yi (1<=yi& ...

  8. TOYS(计算几何基础+点与直线的位置关系)

    题目链接:http://poj.org/problem?id=2318 题面: TOYS Time Limit: 2000MS   Memory Limit: 65536K Total Submiss ...

  9. 叉积_判断点与三角形的位置关系 P1355 神秘大三角

    题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三个顶点 第四行:一个点的坐标,试判断该点与前三个点围成三角形的位置关系 (详见样例) 所有 ...

随机推荐

  1. CSS 块级元素、内联元素概念

    p.h1.或div等元素常常称为块级元素,这些元素显示为一块内容:Strong.span等元素称为行内元素,它们的内容显示在行中,即“行内框”.(可以使用display=block将行内元素转换成块元 ...

  2. [oracle] oracle-ibatis-整理

    ① <!-- 复用sql代码 --> <sql id="CUSTOM_CABINET_INFO.QUERY_CABINET"> <dynamic pr ...

  3. Python 字符串切片

    #-*- coding:utf-8 -*- #字符串切片 names = "abcdefgh" ''' 切片语法 names[起始位置:终止位置:步长] 起始位置:即字符串的下标, ...

  4. ubuntu之Matlab安装

    (清华大学校内适用) 1.首先下载Matlab镜像:http://its.tsinghua.edu.cn/column/jsrj/1,一共有两个ios文件. 2.然后执行 cd ~ mkdir mat ...

  5. 深入解析AsyncTask

    REFRENCES:http://blog.csdn.net/hitlion2008/article/details/7983449 AsyncTask的介绍及基本使用方法 关于AsyncTask的介 ...

  6. Python C :ctypes库

    >>> import ctypes >>> from ctypes import * >>> dir(ctypes) ['ARRAY', 'Arg ...

  7. 新兵训练营课程——环境与工具Java[转]

    原文地址:http://weibo.com/p/1001643874239169320051 程序员在开发过程中会用到很多工具来提升开发和协作效率,这次介绍的是目前微博平台在开发过程中用到的一些工具, ...

  8. PL/SQL developer(绿色版)安装及配置

    1.PL/SQL Developer下载地址:百度网盘: 2.tsname.ora配置: orcl = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS )) ) (CO ...

  9. Unity5.4新版AssetBundle资源打包

    (1)新版本 唯一打包API Buildpipeline.BuildAssetBundle (2)在资源的Inpector界面最下方可设置该资源的assetbundleName, 每个assetbun ...

  10. COOKIE和SESSION关系和区别等

    一.cookie介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 c ...