随笔分类 -  高效算法设计

摘要:题意:已知歌单中的歌曲数目s,和部分的播放历史,问下一首可能播放的歌曲种数。 分析: 1、按照歌单数目s,将播放历史划分为几部分。 2、将播放历史的n首歌曲之前加上s首歌曲,之后加上s首歌曲,为防止标号重复,分别将其标号为100001 + i和200001 + i。 3、枚举这个新的序列中的每首歌, 阅读全文
posted @ 2017-08-17 18:12 Somnuspoppy 阅读(258) 评论(0) 推荐(0)
摘要:题意:给定N个数,求和大于等于S的最短连续子序列的长度。 分析:滑动窗口即可。两种写法。 1、 2、 阅读全文
posted @ 2017-07-04 10:30 Somnuspoppy 阅读(178) 评论(0) 推荐(0)
摘要:题意:将序列1,2,3,……,n,用不超过2n^2次操作,通过下列操作变成给定序列。(1<=n<=300) 1、交换前两个元素 2、将第一个元素移到最后 分析:因为将序列变成升序更容易操作,所以倒着输出解,进行如下操作: 1、交换前两个元素 2、将最后一个元素移到第一个(当a[0] < a[1] | 阅读全文
posted @ 2017-02-08 17:31 Somnuspoppy 阅读(242) 评论(0) 推荐(0)
摘要:题意:输入一个n(2<=n<=1000,n是偶数)个字符串的集合D,找一个长度最短的字符串S(不一定在D中出现),使得D中恰好一半串小于等于S,另一半串大于S。如果有多解,输出字典序最小的解。 分析:找到最中间的两个串,直接按位构造。 阅读全文
posted @ 2017-02-07 16:36 Somnuspoppy 阅读(267) 评论(0) 推荐(0)
摘要:题意:环形跑道上有n(n <= 100000)个加油站,编号为1~n。第i个加油站可以加油pi加仑。从加油站i开到下一站需要qi加仑汽油。你可以选择一个加油站作为起点,起始油箱为空(但可以立即加油)。你的任务是选择一个起点,使得可以走完一圈后回到起点。假定油箱中的油量没有上限。如果无解,输出Not 阅读全文
posted @ 2017-02-06 23:34 Somnuspoppy 阅读(290) 评论(0) 推荐(0)
摘要:题意:输入一个长度为n(n <= 10^6)的序列A,找到一个尽量长的连续子序列AL~AR,使得该序列中没有相同的元素。 分析: 法一:从r=0开始不断增加r,当a[r+1]在子序列a[l~r]中出现过,只需增大l,并继续延伸r,因为a[l~r]为可行解,则l增大后必然还是可行解。用set判断a[r 阅读全文
posted @ 2017-02-06 14:01 Somnuspoppy 阅读(216) 评论(0) 推荐(0)
摘要:题意:平面上有n(n <= 1000)个点,每个点为白点或者黑点。现在需放置一条隔板,使得隔板一侧的白点数加上另一侧的黑点数总数最大。隔板上的点可以看做是在任意一侧。 分析:枚举每个基准点i,将一条直线绕这个点旋转,每当扫过一个点,就可以动态修改两侧的点数。 对于--sum, 1、如果while循环 阅读全文
posted @ 2017-02-06 13:06 Somnuspoppy 阅读(220) 评论(0) 推荐(0)