M - 清空水箱
基本信息
题目出处 | 2022 ICPC 亚洲区域赛南京站 |
队伍通过率 | 124/465 (26.7%) |
题解
每个局部最低点都要安装一个出水阀门,因此本题求的就是局部最低点的数量。
如上图所示,局部最低点可以按是否位于水平平面上分成两种情况。
对于第一种情况,局部最低点 \(P\) 不在水平平面上。那么
- 以 \(P\) 为终点的向量 \(\vec v_1\) 的 \(y\) 值应该小于 \(0\),而以 \(P\) 为起点的向量 \(\vec v_2\) 的 \(y\) 值应该大于 \(0\)。
- 为了防止“天花板”上的点被错误统计,由于多边形的顶点是按逆时针顺序给出的,因此还要额外判断 \(\vec v_1 \times \vec v_2 > 0\),这里 \(\times\) 是向量的叉积。请看下半部分的图像,体会虚线上方和下方相似结构在叉积结果上的区别。
对于第二种情况,局部最低点 \(P\) 在水平平面上。我们不妨以平面上的第一个点 \(P\) 为代表。这里的“第一个点”指的是以 \(P\) 为终点的向量不是水平的。
- 以 \(P\) 为终点的向量 \(\vec v_1\) 的 \(y\) 值应该小于 \(0\),而从 \(P\) 开始下一条不是水平的向量 \(\vec v_2\) 的 \(y\) 值应该大于 \(0\)。
- 为了防止“天花板”上的点被错误统计,由于多边形的顶点是按逆时针顺序给出的,因此还要额外判断 \(P\) 的下一个点 \(Q\)。\(Q\) 的 \(x\) 坐标需要大于 \(P\) 的 \(x\) 坐标。请看下半部分的图像,体会虚线上方和下方相似结构在 \(x\) 坐标关系上的区别。另外注意,这种情况下的叉积可以是任意值(请看中间和右边的图),因此无法用叉积进行判断。
枚举每个点并进行判断即可。复杂度 \(\mathcal{O}(n)\)。
参考代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|