随笔分类 -  算法入门经典第二版第八章 高效算法设计

摘要:题意:有一个洞穴,每个位置有一个底的高度p[i],和对应顶的高度s[i],要往里面尽量放燃料,要求燃料不能碰到顶,可以无限接近。题解:制约燃料储放的就是顶的高度了,分别求出设当前储放位置的向两边的延伸不会碰到顶的最大高度。设当前最大高度为level,起始位置为顶高,移动到下一格的时如果碰到顶,那么降... 阅读全文
posted @ 2015-08-01 23:16 瑞宇 阅读(434) 评论(0) 推荐(0)
摘要:题意:有n支队伍(n是2的整数幂,2using namespace std;const int maxn = 1025;char G[maxn][maxn];int vec[5][maxn];int main(){ // freopen("in.txt","r",stdin); int n... 阅读全文
posted @ 2015-08-01 21:28 瑞宇 阅读(667) 评论(0) 推荐(0)
摘要:题意:给你一个长度为n序列,如果这个任意连续子序列的中都有至少出现一次的元素,那么就称这个序列是不无聊的,判断这个序列是不是无聊的。先预处理出每个元素之前和之后相同元素出现的位置,就可以在O(1)的时间判断出一个元素在一个区间内是否唯一。每次从大的序列中找一个唯一元素,包含这个元素的就不用判断了,那... 阅读全文
posted @ 2015-08-01 19:00 瑞宇 阅读(1494) 评论(0) 推荐(0)
摘要:题意:给你一个按发生时间的序列,表示与非门电路的输入,一开始全部输入是x,现在要改成尽量少的x,实现相同的功能。题解:电路功能只有4中0,1,x,非x。那么如果一开始x改变了,输出结果不变,那么说明是常量电路。否则一定可以只用一个x来实现相同的功能,因为从全为0到全为1的过程中一定会有某个时刻,改变... 阅读全文
posted @ 2015-08-01 17:27 瑞宇 阅读(833) 评论(0) 推荐(0)
摘要:摘要:数形结合,斜率优化,单调队列。题意:求一个长度为n的01串的子串,子串长度至少为L,平均值应该尽量大,多个满足条件取长度最短,还有多个的话,取起点最靠左。求出前缀和S[i],令点Pi表示(i,S[i]),那么这个问题就转化成了求斜率最大的两点。画图分析可知,如果有上凸点,那么上凸点,一定不会是... 阅读全文
posted @ 2015-08-01 15:28 瑞宇 阅读(590) 评论(0) 推荐(0)
摘要:给一个长度为n的序列,要求删除一个连续子序列,使剩下的序列有一个长度最大的连续递增子序列。最简单的想法是枚举起点j和终点i,然后数一数,分别向前或向后能延伸的最长长度,记为g(i)和f(i)。可以先预处理出每一个点能往前和往后延伸的长度(g(i)和f(i))。然后枚举终点i,快速找一个g(j)最大的... 阅读全文
posted @ 2015-08-01 13:32 瑞宇 阅读(907) 评论(0) 推荐(0)
摘要:任意线可以贪心移动到两点上。直接枚举O(n^3),会TLE。所以采取扫描法,选基准点,然后根据极角或者两两做叉积比较进行排排序,然后扫一遍就好了。旋转的时候在O(1)时间推出下一种情况,总复杂度为O(n^2logN)就可以过了。另外,本题有个很巧妙的技巧,就是一点等效与相反坐标的相反颜色的点。第一次... 阅读全文
posted @ 2015-07-31 23:46 瑞宇 阅读(276) 评论(0) 推荐(0)
摘要:摘要:贪心,问题分解。因为行列无关,所以这个二维问题可以分解成两个一维问题。优先队列实现:类似区间点覆盖的问题,先按照左端点排序,相同然后在按右端点排序(灵活性小的优先选)。最优的选法,当然是要使选的这个点经过的区间越少越好,那么就选最左边的点,因为选右边可能多经过区间,一定不比选最左边的更优。选完... 阅读全文
posted @ 2015-07-31 17:29 瑞宇 阅读(271) 评论(0) 推荐(0)
摘要:摘要:中途相遇。对比map,快排+二分查找,Hash效率。n是4000的级别,直接O(n^4)肯定超,所以中途相遇法,O(n^2)的时间枚举其中两个的和,O(n^2)的时间枚举其他两个的和的相反数,然后O(logN)的时间查询是否存在。首先试了下map,果断TLE//TLE#include#incl... 阅读全文
posted @ 2015-07-31 14:07 瑞宇 阅读(289) 评论(0) 推荐(0)