摘要: 首先,在这道题的搜索框架中,在对每一位进行枚举时,复杂度为$O(n^2)$,但是可知最优解序列的长度不会太长。 其次,采用 $bool$ 类型返回值时,是一种存在性搜索,并不一定能够得到最优解。 综合以上两点,需要采取迭代化搜索,每次限制在当前层中找出一个符合条件的答案,如果找到了的话一定是最优解。 阅读全文
posted @ 2018-10-24 23:08 shellpicker 阅读(674) 评论(0) 推荐(1) 编辑
摘要: 在这里采用的是哈希+二分的方法。 根据回文串的性质可知,可以将回文分成奇回文和偶回文分别进行处理。 对于奇回文来说,每次枚举的端点一定是重合的,因此只需计算出端点左右公共的长度是多少即可,因此二分的是以该枚举点为中心的左半边共有多少个字符。 对于偶回文来说,每次枚举的端点不一定是相等的,因此在二分的 阅读全文
posted @ 2018-10-24 22:24 shellpicker 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 取进制数为131,每次$O(N)$时间预处理出幂次和母串的滚动哈希值。 代码如下 cpp include using namespace std; const int maxn=1e6+10; const int base=131; char s1[maxn],s2[maxn]; unsigned 阅读全文
posted @ 2018-10-24 20:42 shellpicker 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 题目:给定一个序列,求其第 K 大的数是多少。 时间复杂度$O(n)$ 代码如下: cpp include using namespace std; const int maxn=5e6+10; inline int read(){ int x=0,f=1;char ch; do{ch=getcha 阅读全文
posted @ 2018-10-24 18:54 shellpicker 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 题目:给定一个序列a[ ],共 N 个正数,现有 M 次询问,每次给出一个 T ,需要求出最大的 k ,满足$\Sigma_{i=1}^ka[i] using namespace std; const int maxn=1e5+10; int sum[maxn],n,m; int main(){ s 阅读全文
posted @ 2018-10-24 12:17 shellpicker 阅读(303) 评论(0) 推荐(0) 编辑