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. 关于Cocos2d-x中的scheduleUpdate和update方法的使用

    一.如果要让某类实例对象要连续执行某些语句(比如让每个Block实例从运行框最右边移动到最左边) 要在Block类中增加一些东西 1.先在其.cpp文件的init()函数中执行scheduleUpda ...

  2. 【C#】获取电脑DPI

    public static class DPIGeter { /// <summary> /// 获取DPI /// </summary> /// <param name ...

  3. winform程序_根据输入的sql生成excel(字段名与sql一致)

    自己打开看吧 app.config可配置数据库路径 excel保存路径.... 源码下载链接: http://pan.baidu.com/s/1bnHPhdd

  4. Python使用paramiko库远程安全连接SSH

    #!/usr/bin/python #ssh import paramiko import sys,os host='127.0.0.1' user = 'whl' password = ' s = ...

  5. PHP中如何获取网站根目录物理路径

    在php程序开发中经常需要获取当前网站的目录,我们可以通过常量定义获取站点根目录物理路径,方便在程序中使用. 下面介绍几种常用的获取网站根目录的方法. php获取网站根目录方法一: <?php ...

  6. Linux下oracle11g 导入导出操作详细

    //用dba匿名登录 [oracle@enfo212 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Wed Ma ...

  7. 使用Visual Studio将C#生成DLL文件的方法

    1.命令方式 打开Visual Studio安装目录下的开发人员命令提示 译 File.cs 以产生 File.exe csc File.cs 编译 File.cs 以产生 File.dll csc ...

  8. [redis] redis 对string类型数据操作

    package com.xwolf.java.redis; import org.junit.Before; import org.junit.Test; import redis.clients.j ...

  9. GIS-"地理空间大数据与AI的碰撞"学习笔记

    1.关系 人工智能>机器学习>神经网络>深度学习 2.机器学习-两个过程 训练/学习过程:样本数据.学习器.模型参数 测试/预测过程:预测.预测值 3.神经网络 机器学习模拟人脑神经 ...

  10. mysql中根据一个字段相同记录写递增序号,如序号结果,如何实现?

      mysql中根据一个字段相同记录写递增序号,如序号结果,如何实现? mysql中实现方式如下: select merchantId, NameCn, send_date, deliver_name ...