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;
}
分享到:
相关推荐
描述中提到的“叉积+深搜”,指的是在解决这个问题时可能用到的两种技术。叉积是向量运算的一种,用于判断两个向量的方向关系,也可以用来计算两个向量构成的角的大小。在计算几何中,叉积常用于判断点的位置关系、...
* 叉积和点积的运用:poj2031, poj1039 * 多边型的简单算法:poj1408, poj1584 * 凸包:poj2187, poj1113 中级部分: 一、基本算法 * C++的标准模版库的应用 + poj3096, poj3007 * 较为复杂的模拟题的训练 + ...
* 哈希表和二分查找等高效查找法:例如 poj3349、poj3274、poj2151、poj1840、poj2002、poj2503。 * 哈夫曼树:例如 poj3253。 * 堆:例如 poj2513。 * trie 树:例如 poj2513。 4. 简单搜索: * 深度优先搜索...
* 哈希表和二分查找等高效查找法:哈希表和二分查找等高效查找法是指解决问题的高效查找算法,如 poj3349、poj3274、POJ2151、poj1840、poj2002、poj2503。 * 哈夫曼树:哈夫曼树是指解决问题的哈夫曼树算法,如 poj...
包括最长公共子序列、最优二分检索树等问题,关键在于状态转移方程的设计。 ### 六、数学 #### 组合数学 涵盖加法原理、乘法原理、排列组合等,用于解决计数问题,如poj3252。 #### 数论 涉及素数检测、整除性、...
- **哈希表和二分查找**:提高查找效率,如poj3349,用于快速定位元素。 - **哈夫曼树**:压缩编码,如poj3253。 - **堆**:如优先队列,用于实现最大值或最小值的快速访问。 - **trie树**:用于高效字符串查询...
二分查找适用于有序数组。 - **示例题目**: - poj3349 - poj3274 - poj2151 - poj1840 - poj2002 - poj2503 - **应用场景**:适用于快速查找、统计频率等问题。 **5. 哈夫曼树** - **定义**:一种带权路径...
4. **哈希表** 和 **二分查找**:提供高效查找能力,如POJ3349、3274、2151、1840、2002和2503。 5. **哈夫曼树**:用于压缩编码,如POJ3253。 6. **堆**:用于优先队列和部分排序问题。 7. **Trie树**:用于字符串...
叉积法融合陀螺和加速度核心程序详解 叉积法融合陀螺和加速度核心程序是一种常见的机载姿态解算方法,广泛应用于无人机、机器人、自动驾驶等领域。该方法通过融合陀螺仪和加速度计的数据,实时计算机载的姿态信息。...
#### 二、矢量叉积、点积基础知识 ##### 2.1 C3I系统中矢量表达式 在C3I系统中,矢量通常有两种表达方式: 1. **极坐标表示**:当已知矢量长度\( p \)和角度\( \theta \)时,矢量可以表示为\( (p, \theta) \)。 2...
叉积的应用_卓亮.pdf 叉积是三维空间上两个向量的一种二元运算,记作⃗a × ⃗b。它的计算公式为⃗a × ⃗b = |⃗a||⃗b| sin θ⃗n, where ⃗n是垂直于⃗a和⃗b的单位向量。叉积有很多重要的性质和应用,如标量...
(4) 哈希表和二分查找等高效查找法:poj3349, poj3274, POJ2151, poj1840, poj2002, poj2503 (5) 哈夫曼树:poj3253 (6) 堆 (7) trie树:poj2513 四、简单搜索 本部分涵盖了简单搜索,包括深度优先搜索、广度优先...
### 欧式空间中向量的叉积及其应用 #### 概述 本文主要探讨了欧式空间中向量的叉积概念及其在数学领域的应用。叉积是一种重要的向量运算方式,在三维空间中尤为常见,它对于解决几何问题、物理问题等具有重要意义...
4. 哈希表和二分查找:高效查找,如POJ 3349。 5. 哈夫曼树:压缩编码,如POJ 3253。 6. 堆:如POJ 2513。 7. Trie树:静态建树和动态建树,如POJ 2513。 四、搜索 1. 深度优先搜索(DFS):如POJ 2488。 2. 广度...
哈希表和二分查找在 poj3349 等题目中体现其效率。trie 树在 poj2513 中有应用。 搜索策略包括深度优先搜索(DFS)和广度优先搜索(BFS),如 poj2488 和 poj3278。搜索技巧和剪枝可以优化解决方案,如 poj2531 和 ...
如果我们将二维向量u(ux, uy)和v(vx, vy)表示为两个点的坐标差,那么它们的点积可以表示为u * v = (ux * vx + uy * vy)。通过点积公式,我们可以计算出u和v之间的夹角α的余弦值,即cosα = u * v / (|u||v|)。若点...
"向量的点积与叉积" 向量的点积(数量积)是两个向量的乘积,记为 a · b 或(a,b),它是一个标量值。点积也称为“点积”、“内积”。点积的定义为:a · b = |a| |b| cosθ,其中θ是两个向量之间的夹角。 点积...
poj1035、poj3080和poj1936是关于串的问题,poj2388和poj2299则是排序算法的实践,poj3349和poj3274则涉及哈希表和二分查找,而poj3253则考察哈夫曼树的构建。 四、简单搜索 搜索算法通常分为深度优先搜索(DFS)和...
在右手坐标系中,如果你将右手的四指沿着第一个向量`u`弯曲,使大拇指指向第二个向量`v`的方向,那么大拇指的指向就是`w`的方向。而在左手坐标系中,应使用左手进行同样的操作。 叉积的计算公式是 `(u × v)_i = u_...
4. 哈希表和二分查找:快速查找,如poj3274、poj2151等。 5. 哈夫曼树:用于压缩编码,如poj3253。 6. 堆:优先队列实现,如poj1459。 7. Trie树:用于高效字符串查询,如poj2513。 四、简单搜索 1. 深度优先搜索...