230 likes | 375 Views
IOI2010 国家集训队论文问题解析 ——. 大灾变. 河南省实验中学 郭家宝. 问题回顾. 有一座山脉,要求在山脉上建立一座瞭望塔,在山脉上空建立一个浮空岛,使得站在瞭望塔的顶端和浮空岛上,可以看到整个山脉。 瞭望塔塔身高度应尽量小,浮空岛的绝对海拔应尽量低,并且在满足上述条件的情况下横坐标尽量小。请你求出瞭望塔和浮空岛的坐标。. 问题回顾. 样例如下图所示. 瞭望塔. 浮空岛. 海平面. 初步分析. 题目要求看到整个山脉,就是看到所有的山坡。 首先考虑绝对高度最低点。 从一个较低高度开始垂直上升,直到看见整个山脉。. 欲窮千里目 更上一層樓.
E N D
IOI2010国家集训队论文问题解析—— 大灾变 河南省实验中学 郭家宝
问题回顾 • 有一座山脉,要求在山脉上建立一座瞭望塔,在山脉上空建立一个浮空岛,使得站在瞭望塔的顶端和浮空岛上,可以看到整个山脉。 • 瞭望塔塔身高度应尽量小,浮空岛的绝对海拔应尽量低,并且在满足上述条件的情况下横坐标尽量小。请你求出瞭望塔和浮空岛的坐标。
问题回顾 • 样例如下图所示 瞭望塔 浮空岛 海平面
初步分析 • 题目要求看到整个山脉,就是看到所有的山坡。 • 首先考虑绝对高度最低点。 • 从一个较低高度开始垂直上升,直到看见整个山脉。 欲窮千里目 更上一層樓
初步分析 • 站得越高,看得越远。 • 从低处向高处走,可视范围增加。 • 单调性。 行遠必自邇 登高必自卑
算法甲 ——登高必自卑 • 二分枚举高度,判断当前高度上是否可以一览全貌。 • 如果存在,降低高度,如果不存在,升高高度。 • 如何判断?
算法甲 ——登高必自卑 可行区域 试探高度 海平面
算法甲分析 ——登高必自卑 • 时间复杂度O(NlogE)。 • 这种方法求出的位置,是绝对高度最小的位置。可以求相对高度最小的位置吗?
再次分析 • 猜想:瞭望塔一定建在山峰上。 • 反例:
再次分析 • 猜想:瞭望塔一定在浮空岛周围的同一山峰的山坡上(距离不远)。 • 反例: 瞭望塔 浮空岛
重新思考 • 一个山坡只能在山坡线的一侧被看到。 • 所有山坡可视区域的公共部分,就是整个山脉的可视区域。 • 接下来只需在可视区域内查找相对高度和绝对高度的最小的点了。 不識廬山眞面目 祇緣身在此山中
算法乙 ——一覽眾山小 • 求所有半平面的交集。 • 可视区域就是“上方未封口的凸多边形”,抽象为分段函数。 • 扫描可视区域,求出相对高度和绝对高度最小的位置。 會當淩絕頂 一覽眾山小
算法乙 ——一覽眾山小 可视区域 海平面
算法乙分析 ——一覽眾山小 • 算法瓶颈:求半平面交。 • 时间复杂度:O(N^2)或O(NlogN)。 • 实现起来复杂。 • 还可以改进吗?
算法丙 ——刪繁就簡三秋樹 • 将直线按斜率排序,依次插入。 • 每次求交点,判断新插入的直线是否更优。 刪繁就簡三秋樹 領異標新二月花
算法丙 ——刪繁就簡三秋樹 p1 p2.x > p1.x p2
算法丙 ——刪繁就簡三秋樹 p2.x <= p1.x p2 p1
算法丙 ——刪繁就簡三秋樹
算法丙 ——刪繁就簡三秋樹 可视区域 海平面
算法丙分析 ——刪繁就簡三秋樹 • 时间复杂度:O(NlogN) • 特殊问题用特殊方法解决。 恢恢乎 其於遊刃必有餘地矣
总结 ——爲有源頭活水來 • 优化无止境,有O(N)的算法嗎? • 思考无止境,还有别的思路吗? • 学习无止境,还能学到别的知识吗? 問渠那得清如許 爲有源頭活水來
试题考查点 • 计算几何基本知识 • 二分思想 • 半平面交 • 单调性的应用 • 分段一次函数求最值
路曼曼其修遠兮 吾將上下而求索 感谢大家 郭家宝 byvoid1[at]gmail.com