TOYS
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 13120   Accepted: 6334

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 题意:给定n根线段将平面分成n+1个区域,然后给m个点,分散在大平面内,问每个区域内有多少个点
分析:对于每个点,我们只要利用叉积判断是否在某条线段逆时针方向就行了.这个题的点数应该开10000.
有二分的做法,比我这个应该要快不少,暴力938MS
叉积的性质:设矢量 P = (x1, y1), Q = (x2, y2),则 P * Q = x1 * y2 - x2 * y1; 其结果是一个由 (0, 0), P, Q, P + Q 所组成的平行四边形的 带符号的面积,P * Q = -(Q * P), P * (- Q) = -(P * Q)。
      叉积的一个非常重要的性质是可以通过它的符号来判断两矢量相互之间的顺逆时针关系:
            若 P * Q > 0,则 P 在 Q 的顺时针方向;
            若 P * Q < 0, 则 P 在 Q 的逆时针方向;
            若 P * Q = 0,则 P 与 Q 共线,但不确定 P, Q 的方向是否相同;
#include <iostream>
#include <cstdio>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
const int N = ;
struct Point
{
int x,y;
} p[N],q[N];
int n,m,x1,y11,x2,y2; bool used[N];///判断点是否已经被选过了
int cnt[N]; ///判断某区域的点数量 int mult(Point a,Point b,Point c){
return (a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x);
} int main()
{
while(scanf("%d",&n)!=EOF,n)
{
scanf("%d%d%d%d%d",&m,&x1,&y11,&x2,&y2);
memset(used,false,sizeof(used));
memset(cnt,,sizeof(cnt));
int k=;
for(int i=;i<=n;i++){
scanf("%d%d",&p[k].x,&p[k+].x);
p[k].y=y11,p[k+].y=y2;
k+=;
}
for(int i=;i<m;i++){
scanf("%d%d",&q[i].x,&q[i].y);
}
int sum=;
for(int i=;i<=n;i++){
for(int j=;j<m;j++){
if(mult(p[*i-],q[j],p[*i])>&&!used[j]){
cnt[i-]++;
used[j]=true;
}
}
sum+=cnt[i-];
}
cnt[n] = m-sum;
for(int i=;i<=n;i++){
printf("%d: %d\n",i,cnt[i]);
}
printf("\n");
}
return ;
}

poj 2318(叉积判断点在线段的哪一侧)的更多相关文章

  1. poj 2398(叉积判断点在线段的哪一侧)

    Toy Storage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5016   Accepted: 2978 Descr ...

  2. POJ 2318 TOYS 利用叉积判断点在线段的那一侧

    题意:给定n(<=5000)条线段,把一个矩阵分成了n+1分了,有m个玩具,放在为位置是(x,y).现在要问第几个位置上有多少个玩具. 思路:叉积,线段p1p2,记玩具为p0,那么如果(p1p2 ...

  3. POJ 2318 叉积判断点与直线位置

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

  4. poj 2318 叉积+二分

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

  5. POJ 2318 (叉积) TOYS

    题意: 有一个长方形,里面从左到右有n条线段,将矩形分成n+1个格子,编号从左到右为0~n. 端点分别在矩形的上下两条边上,这n条线段互不相交. 现在已知m个点,统计每个格子中点的个数. 分析: 用叉 ...

  6. POJ 3304 Segments (判断直线与线段相交)

    题目链接:POJ 3304 Problem Description Given n segments in the two dimensional space, write a program, wh ...

  7. POJ 3304 Segments 判断直线和线段相交

    POJ 3304  Segments 题意:给定n(n<=100)条线段,问你是否存在这样的一条直线,使得所有线段投影下去后,至少都有一个交点. 思路:对于投影在所求直线上面的相交阴影,我们可以 ...

  8. poj3304(叉积判断直线和线段相交)

    题目链接:https://vjudge.net/problem/POJ-3304 题意:求是否能找到一条直线,使得n条线段在该直线的投影有公共点. 思路: 如果存在这样的直线,那么在公共投影点作直线的 ...

  9. [poj] 2318 TOYS || 判断点在多边形内

    原题 给出一个矩形玩具箱和其中隔板的位置,求每个玩具在第几个隔间内(保证没有在线上的玩具) 将玩具按x轴排序,记录当前隔板的编号,每次判断是否需要右移(左移)隔板(因为是有序的,所以移动次数左右不厚超 ...

随机推荐

  1. Linux TCP协议使用的变量

    Linux /proc/sys/net/ipv4/* 变量 TCP变量:somaxconn - INTEGER    listen()的backlog参数的上限,在用户态为SOMAXCONN.默认是1 ...

  2. java正则表达式 3 -- 查找

    用正则表达式执行查找命令,则需要用正则对象,其规则和执行顺序如下: 指定为字符串的正则表达式必须首先被便以为此类的实例.然后,可将得到的正则对象匹配任意的字符串用于创建Mather对象,执行匹配所涉及 ...

  3. MvcMusicStore学习中常出现的一个BUG

    BUG描述:var genreModel = storeDB.Genres.Include("Albums").Single(g => g.Name == genre); 前 ...

  4. java线程(6)——线程池(下)

    上篇博客java线程(5)--线程池(上)介绍了线程池的基本知识,这篇博客我们介绍一下常用的ThreadPoolExecutor. 定义 类图关系: ThreadPoolExecutor继承了Abst ...

  5. xinetd不太详的详解

    xinetd不太详的详解 http://blog.sina.com.cn/s/blog_88cdde9f01019fg5.html ################################## ...

  6. Windows关机过程分析与快速关机

    原文链接:http://blog.csdn.net/flyoxs/article/details/3710367 Windows开机和关机慢,很多时候慢得令人抓狂.特别是做嵌入式开发时(如XPE和Wi ...

  7. [Leetcode] count and say 计数和说

    The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...

  8. [Leetcode] Add two numbers 两数之和

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...

  9. HDU 1203 01背包

    I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  10. mysql的对象

      mysql 常见的数据对象有哪些: DataBase/Schema Table Index View/Trigger/Function/Procedure   多Database用途: 业务的隔离 ...