NOIP2012提高组 开车旅行 解题报告
开车旅行
题目描述
样例输入
样例输出
70分算法
暴力预处理出对于每一个点他右边最近、次近的点的编号,对于每一个询问,暴力模拟开车过程即可。
100算法
和上面一样我们得预处理出每一个点最近、次近的点得编号,但我们不可以使用 O(n2) O_{(n^2)}的算法。
预处理方法一:线段树。线段树维护三个值,区间内最小值、最大值、数的个数。从右往左找( n n~11),当找到第 i i个点时,第i+1i+1个点到第 n n个点的高度值已经更新过了线段树。通过线段树找出高度比HiH_i大的最小、次小值,以及找出高度比 Hi H_i小的最大、次大值,便可以更新第 i i个点的最近、次近的点的编号了。因为HiH_i的值可能很大,会空间超限,所以做之前需要离散化一次。
预处理方法二:双向链表。相比线段树,不需要离散化,但是细节多,调试较麻烦。先将 Hi H_i从小到大排序,将两两相邻的两个点连起来。再从前往后枚举 i i,对于每一个点ii,找出它后面连着的两个点(即为大于 Hi H_i的最小、次小点)和找出它前面连着的两个点(即为小于 Hi H_i的最大、次大点),这样就可以更新出第 i i个点的最近、次近点。之后,再将第ii的点从链表中删去,将其前后的两个元素相连起来。
预处理完毕后,就可以开始求答案了。
如果 A A从xx点开车至 y y点,然后BB从 y y点开车到zz点,则我们视为 x x向zz来了一条边,我们称从 x x开车到zz成为“一轮”。
接下来我们要求出在点 i i开车经过了2j2^j轮后到达的点的编号,设其为 m m[ii][ j j]。首先,从后往前枚举ii,我们可以通过预处理出来的数据求出 m m[ii][ 0 0],之后对于每一个mm[ i i][jj]我们可以从 m m[ii][ j j-1]转移过来。(设kk= m m[ii][ j j-1]),则mm[ i i][jj]= m m[kk][ j j-1],即等于i跳了两次2j−12^{j-1}轮,即 2j 2^{j}轮,跳到不能跳为止。同时处理一下 A A开过的路程和BB开过的路程。上面做的一切都是为了接下来的答案求值。接下来要介绍一种算法——倍增。倍增,顾名思义,就是成倍成倍的增长。第一次先开 217 2^{17}轮(最多),第二次再开 216 2^{16}轮,然后 215 2^{15}轮、 214 2^{14}轮……可以跳 2j 2^{j}轮便跳(即不会越界),不行就不跳。此时开车开到再也开不了为止,这个点便是终点。这样就可以在很短的时间内求出答案。
注:答案会很大,需要开int64(long long)
NOIP2012提高组 开车旅行 解题报告相关推荐
- P1081 [NOIP2012 提高组] 开车旅行(倍增)(动态规划)
洛谷传送门 文章目录 题目描述 解析 代码 题目描述 解析 利用倍增,设计dp慢慢敲即可... 注意距离累加在一起会爆int,需要ll 特判条件非常之复杂... 心力交瘁,就酱了 代码 #includ ...
- noip2011提高组day1+day2解题报告
Day1 T1铺地毯https://www.luogu.org/problem/show?pid=1003 [题目分析] 全部读入以后从最后一个往前找,找到一个矩形的范围覆盖了这个点,那这个矩形就是最 ...
- 糖果(2019第十届蓝桥杯省赛C++A组I题) 解题报告(状压dp) Apare_xzc
糖果(2019第十届蓝桥杯省赛C++A组I题) 解题报告(状压dp) xzc 2019/4/5 试题 I: 糖果 时间限制: 1.0s 内存限制: 256.0MB 本题总分:25分 [问题描述] ...
- 洛谷P1083 [NOIP2012提高组Day2T2]借教室
P1083 借教室 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借 ...
- [NOIP2012提高组] CODEVS 1200 同余方程(扩展欧几里德算法)
数论题..所有数论对我来说都很恶心..不想再说什么了.. ------------------------------------------------ #include<iostream&g ...
- [NOIP2012] 提高组 洛谷P1080 国王游戏
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍 ...
- 【NOIP2012 提高组】 国王游戏
题目: 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最前 ...
- 【NOIP2012提高组】开车旅行
Description 现在有n个城市,每个城市有它的高度 Hi H_i,保证每个 Hi H_i互不相同.我们定义两个城市之间的距离 disi,j=|Hi−Hj| dis_{i,j}=|H_i-H_j ...
- [NOIP2012提高组]国王游戏
题目:洛谷P1080.Vijos P1779.codevs1198. 题目大意:国王和每个大臣左.右手各写了一个数.规定每个大臣得到的金币数为他前面所有人左手的数字的乘积除以他自己右手的数(向下取整) ...
最新文章
- 解决At least one JAR was scanned for TLDs yet contained no TLDs. 问题
- Linux小细节-1
- arcgis安装license的问题
- 动态加载NT驱动(源码)
- Java库可以软件著作权,(最新整理)软件著作权-源代码范本
- 乐高百变工程旋转飞椅知识点_每日一个知识点:关于磁盘的一些事儿
- 2015安徽省赛 G.你来擒孟获
- 你们和父亲关系怎么样?
- android ——Toolbar
- 153. Find Minimum in Rotated Sorted Array找其中的最小值
- c语言暂存按键数据变量,ET6218R按键检测程序
- Jsp 中 include 指令和 include 动作的区别
- 解决VsCode下载慢问题
- 机器学习算法(十):线性回归之最小二乘法
- CF1528B Kavi on Pairing Duty(dp)
- 计算机ppt制作培训心得体会,制作ppt学习心得体会.doc
- outlook答复_如何在Windows版Outlook中设置外出答复
- 取模运算总结 - 数论
- 图形学进阶——移动端TB(D)R架构基础
- 二项堆与斐波那契堆各个操作时间复杂度
热门文章
- 阿里某员工用野路子四年狂“赚”千万,结果被判 6 年!
- tp5使用sum()聚合函数分组查询
- WPS表格 三级下拉列表的建立 以及一些问题
- [ 数据结构 ] 迪杰斯特拉算法(最短路径问题)
- excel添加列下拉框票价_Excel多行多列数据源下拉菜单-excel设置下拉菜单
- 超级好玩的经营模拟类游戏—模拟人生3 Mac全dlc整合版
- 易中天经典语录(爆强)
- IK分词原理深度解析
- 风险洞察之事件总线的探索与演进
- 【QT开发专题-天气预报】6. 构建 JSON字符串