`

【叉积+二分】POJ 2318 TOYS

阅读更多
http://poj.org/problem?id=2318

题意:求每个被割线分离的区间内各有多少个点?

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

#include <iostream>
#include <fstream>
#include <algorithm>
#include <string>
#include <set>
//#include <map>
#include <queue>
#include <utility>
#include <stack>
#include <list>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <ctype.h>
using namespace std;

struct point{    //点的结构
	double x, y;
	point (double a = 0, double b = 0)
	{
		x = a, y = b;
	}
}p[5005];
double U[5005], L[5005];
int res[5005];

double multi (point a, point b, point c)    //叉积判断点线关系
{
	double x1, y1, x2, y2;
	x1 = b.x - a.x;
	y1 = b.y - a.y;
	x2 = c.x - b.x;
	y2 = c.y - b.y;
	return x1*y2 - x2*y1;
}

int main()
{
	int n, i, m, l, r, mid, cc = 1;
	double x1, y1, x2, y2;
	while (scanf ("%d", &n), n)
	{
		if (cc == 2)
			printf ("\n");
		cc = 2;
		scanf ("%d%lf%lf%lf%lf", &m, &x1, &y1, &x2, &y2);
		for (i = 0; i < n; i++)
			scanf ("%lf%lf", U+i, L+i);    //输入分割线的上端+下端的横坐标
		U[n] = L[n] = x2;    //加最后一条边(矩型的右边),二分有用

/***********************************华丽的分割线***********************************/

		//下面是利用 叉积+二分 查找点所在位置,二分太强大了
		memset (res, 0, sizeof(res));
		for (i = 0; i < m; i++)
		{
			scanf ("%lf%lf", &p[i].x, &p[i].y);    //输入要找的点
			l = 0, r = n;
			while (l < r)
			{
				mid = (l + r) / 2;
				point b(L[mid], y2), c(U[mid], y1);    //第mid条分割线bc
				if (multi (p[i], b, c) > 0)
					r = mid;
				else l = mid + 1;
			}
			mid = (l + r) / 2;
			res[mid]++;    //得知此点在第mid个区间
		}
		for (i = 0; i <= n; i++)
			printf ("%d: %d\n", i, res[i]);
	}
	return 0;
}
0
5
分享到:
评论
2 楼 基德KID.1412 2011-08-07  
sgeteternal 写道

1 楼 sgeteternal 2011-08-07  

相关推荐

    极角排序:POJ 1696(叉积+深搜)

    描述中提到的“叉积+深搜”,指的是在解决这个问题时可能用到的两种技术。叉积是向量运算的一种,用于判断两个向量的方向关系,也可以用来计算两个向量构成的角的大小。在计算几何中,叉积常用于判断点的位置关系、...

    ACM常用算法及其相应的练习题.docx

    * 叉积和点积的运用:poj2031, poj1039 * 多边型的简单算法:poj1408, poj1584 * 凸包:poj2187, poj1113 中级部分: 一、基本算法 * C++的标准模版库的应用 + poj3096, poj3007 * 较为复杂的模拟题的训练 + ...

    poj题目分类

    * 哈希表和二分查找等高效查找法:例如 poj3349、poj3274、poj2151、poj1840、poj2002、poj2503。 * 哈夫曼树:例如 poj3253。 * 堆:例如 poj2513。 * trie 树:例如 poj2513。 4. 简单搜索: * 深度优先搜索...

    POJ算法题目分类

    * 哈希表和二分查找等高效查找法:哈希表和二分查找等高效查找法是指解决问题的高效查找算法,如 poj3349、poj3274、POJ2151、poj1840、poj2002、poj2503。 * 哈夫曼树:哈夫曼树是指解决问题的哈夫曼树算法,如 poj...

    poj各种分类

    包括最长公共子序列、最优二分检索树等问题,关键在于状态转移方程的设计。 ### 六、数学 #### 组合数学 涵盖加法原理、乘法原理、排列组合等,用于解决计数问题,如poj3252。 #### 数论 涉及素数检测、整除性、...

    POJ题目简单分类(ACM)

    - **哈希表和二分查找**:提高查找效率,如poj3349,用于快速定位元素。 - **哈夫曼树**:压缩编码,如poj3253。 - **堆**:如优先队列,用于实现最大值或最小值的快速访问。 - **trie树**:用于高效字符串查询...

    POJ 分类题目

    二分查找适用于有序数组。 - **示例题目**: - poj3349 - poj3274 - poj2151 - poj1840 - poj2002 - poj2503 - **应用场景**:适用于快速查找、统计频率等问题。 **5. 哈夫曼树** - **定义**:一种带权路径...

    强大的POJ分类——各类编程简单题及其算法分类

    4. **哈希表** 和 **二分查找**:提供高效查找能力,如POJ3349、3274、2151、1840、2002和2503。 5. **哈夫曼树**:用于压缩编码,如POJ3253。 6. **堆**:用于优先队列和部分排序问题。 7. **Trie树**:用于字符串...

    叉积法融合陀螺和加速度核心程序详解(圆点博士四轴).pdf

    叉积法融合陀螺和加速度核心程序详解 叉积法融合陀螺和加速度核心程序是一种常见的机载姿态解算方法,广泛应用于无人机、机器人、自动驾驶等领域。该方法通过融合陀螺仪和加速度计的数据,实时计算机载的姿态信息。...

    矢量点积叉积在C3I系统中的应用

    #### 二、矢量叉积、点积基础知识 ##### 2.1 C3I系统中矢量表达式 在C3I系统中,矢量通常有两种表达方式: 1. **极坐标表示**:当已知矢量长度\( p \)和角度\( \theta \)时,矢量可以表示为\( (p, \theta) \)。 2...

    叉积的应用_卓亮.pdf

    叉积的应用_卓亮.pdf 叉积是三维空间上两个向量的一种二元运算,记作⃗a × ⃗b。它的计算公式为⃗a × ⃗b = |⃗a||⃗b| sin θ⃗n, where ⃗n是垂直于⃗a和⃗b的单位向量。叉积有很多重要的性质和应用,如标量...

    ACM常用算法及其相应的练习题 (2).docx

    (4) 哈希表和二分查找等高效查找法:poj3349, poj3274, POJ2151, poj1840, poj2002, poj2503 (5) 哈夫曼树:poj3253 (6) 堆 (7) trie树:poj2513 四、简单搜索 本部分涵盖了简单搜索,包括深度优先搜索、广度优先...

    欧式空间中向量的叉积及其应用.pdf

    ### 欧式空间中向量的叉积及其应用 #### 概述 本文主要探讨了欧式空间中向量的叉积概念及其在数学领域的应用。叉积是一种重要的向量运算方式,在三维空间中尤为常见,它对于解决几何问题、物理问题等具有重要意义...

    【最新+免费】ACM主要算法.doc

    4. 哈希表和二分查找:高效查找,如POJ 3349。 5. 哈夫曼树:压缩编码,如POJ 3253。 6. 堆:如POJ 2513。 7. Trie树:静态建树和动态建树,如POJ 2513。 四、搜索 1. 深度优先搜索(DFS):如POJ 2488。 2. 广度...

    很快速的提高算法能力.pdf

    哈希表和二分查找在 poj3349 等题目中体现其效率。trie 树在 poj2513 中有应用。 搜索策略包括深度优先搜索(DFS)和广度优先搜索(BFS),如 poj2488 和 poj3278。搜索技巧和剪枝可以优化解决方案,如 poj2531 和 ...

    ACM 计算几何 向量的点积与叉积

    如果我们将二维向量u(ux, uy)和v(vx, vy)表示为两个点的坐标差,那么它们的点积可以表示为u * v = (ux * vx + uy * vy)。通过点积公式,我们可以计算出u和v之间的夹角α的余弦值,即cosα = u * v / (|u||v|)。若点...

    向量的点积与叉积PPT课件.pptx

    "向量的点积与叉积" 向量的点积(数量积)是两个向量的乘积,记为 a · b 或(a,b),它是一个标量值。点积也称为“点积”、“内积”。点积的定义为:a · b = |a| |b| cosθ,其中θ是两个向量之间的夹角。 点积...

    北大acm试题

    poj1035、poj3080和poj1936是关于串的问题,poj2388和poj2299则是排序算法的实践,poj3349和poj3274则涉及哈希表和二分查找,而poj3253则考察哈夫曼树的构建。 四、简单搜索 搜索算法通常分为深度优先搜索(DFS)和...

    1.4叉积1

    在右手坐标系中,如果你将右手的四指沿着第一个向量`u`弯曲,使大拇指指向第二个向量`v`的方向,那么大拇指的指向就是`w`的方向。而在左手坐标系中,应使用左手进行同样的操作。 叉积的计算公式是 `(u × v)_i = u_...

    ACM算法总结大全——超有用!

    4. 哈希表和二分查找:快速查找,如poj3274、poj2151等。 5. 哈夫曼树:用于压缩编码,如poj3253。 6. 堆:优先队列实现,如poj1459。 7. Trie树:用于高效字符串查询,如poj2513。 四、简单搜索 1. 深度优先搜索...

Global site tag (gtag.js) - Google Analytics