20160410模拟
2016-04-10 16:17
183 查看
T1/T3我都不想写(会)就写写T2吧
给定一个nn个点的环以及相邻两点间的距离,多次询问,从任意点出发,每次给定最远跳的距离ss,询问最少落地次数
题解
考的时候我是这么做的
dp[i]=min{dp[j]+1} (sum[i]−sum[j]≤s)dp[i]=\min\{dp[j]+1\}~~~~(sum[i]-sum[j]\le s)
这个东西可以单调队列优化到O(N)O(N)
用判断条件从队尾踢人
用dpdp值从队头踢人
每次从队头取出元素更新当前dpdp值
枚举起点开始跳
这么做的复杂度为O(N2Q),30ptO(N^2Q),30pt
当复杂度过大时随机4次开始位置
最终得分60pt60pt
题解是这么说的
环拆成链后,可以利用单调性O(N)O(N)求出每个点最远向后跳到哪个点
然后连一条从这个点到它最远到的点的边
由于每个点的最远点只有一个,所以这是棵树
原问题就转化为从一个点最少向上走几步使得到达的点的编号≥i+n\ge i+n
这个怎么求呢?我们记录每个点在树中的深度,每次向上查找
然而这个复杂度会退化
我们加个类似并查集路径合并的小优化
首先很明显dep[i]≤dp[i+1]dep[i]\le dp[i+1],当我们依次查找i→ni\rightarrow n的满足条件的节点的位置一定是不降的,所以每次将查找路径上的点全都指向该次查找的结果位置对之后的查找是不影响的
复杂度O(MNα(N))复杂度O(MN\alpha(N))(题解里就当成并查集的复杂度了……至于正确性我……)
CODE
T2 环游世界(around)
题目大意给定一个nn个点的环以及相邻两点间的距离,多次询问,从任意点出发,每次给定最远跳的距离ss,询问最少落地次数
题解
考的时候我是这么做的
dp[i]=min{dp[j]+1} (sum[i]−sum[j]≤s)dp[i]=\min\{dp[j]+1\}~~~~(sum[i]-sum[j]\le s)
这个东西可以单调队列优化到O(N)O(N)
用判断条件从队尾踢人
用dpdp值从队头踢人
每次从队头取出元素更新当前dpdp值
枚举起点开始跳
这么做的复杂度为O(N2Q),30ptO(N^2Q),30pt
当复杂度过大时随机4次开始位置
最终得分60pt60pt
题解是这么说的
环拆成链后,可以利用单调性O(N)O(N)求出每个点最远向后跳到哪个点
然后连一条从这个点到它最远到的点的边
由于每个点的最远点只有一个,所以这是棵树
原问题就转化为从一个点最少向上走几步使得到达的点的编号≥i+n\ge i+n
这个怎么求呢?我们记录每个点在树中的深度,每次向上查找
然而这个复杂度会退化
我们加个类似并查集路径合并的小优化
首先很明显dep[i]≤dp[i+1]dep[i]\le dp[i+1],当我们依次查找i→ni\rightarrow n的满足条件的节点的位置一定是不降的,所以每次将查找路径上的点全都指向该次查找的结果位置对之后的查找是不影响的
复杂度O(MNα(N))复杂度O(MN\alpha(N))(题解里就当成并查集的复杂度了……至于正确性我……)
CODE
相关文章推荐
- poj 1014(多重背包)
- java线程安全和锁优化
- 邁向IT專家成功之路的三十則鐵律 鐵律三十 IT人成功之道-總結
- Asp.net WebAPi gzip压缩和json格式化
- 进度条第六周
- 左值引用,右值引用以及移动语义
- iOS学习笔记14-网络(三)WebView
- Android——数据存储:手机内部存储
- 在eclipse中引入java程序的方法
- 并查集
- hihocode 第九十二周 数论一·Miller-Rabin质数测试
- 面向对象小结
- java保留两位小数
- 数据库设计 Step by Step (2)——数据库生命周期
- python列出指定文件夹下所有给定后缀名的文件
- lintcode: Maximum Product Subarray
- 泛型(一)
- python:mysql查询
- 软件工程---做汉堡,结对2.0
- EM算法在直线分类与灭点检测中的应用(关于一篇文章的读后感)