题目链接:https://vjudge.net/problem/HDU-3613 Best Reward Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 3104    Accepted Submission(s): 1277 Problem Description After an uphill battle, General Li w…
manacher 和 扩展KMP 事实上,这两个东西是一样的. 考虑 manacher 的过程 我们实时维护最远扩展的位置 \(mx\) 以及这个回文串的回文中心 \(l\) ,那么显然当然位置如果没有超过 \(mx\) ,是可以利用与 \(l\) 的对称位置 \(2l-i\) 的信息的,然后判断一下是否可以延伸 \(mx\) 的位置 也可以出一些有意思的东西 给你一个长为 \(n\) 的串的 \(2n+1\) 的回文数组 \(pa\) ,求哪些字符是相等的. 拿并查集维护的话,有一种类似于萌萌…
传送门 题意: 国王为了犒劳立下战功的大将军Li,决定奖给Li一串项链,这个项链一共包含26中珠子"a~z",每种珠子都有 相应的价值(-100~100),当某个项链可以构成回文时,那么这个项链的价值就是每个珠子价值的加和,如果 构不成,那么这个项链的价值就为0: 求如何将国王奖赏的一串项链拆成价值加和最大的两串项链,求出这个最大价值. 题解: 本来我是在找有关拓展KMP的相关题目的,百度到一大牛的博客(“扩展KMP题目”),当做到第二个题目的时候, 思来想去,就是没找到其和拓展KMP…
After an uphill battle, General Li won a great victory. Now the head of state decide to reward him with honor and treasures for his great exploit. One of these treasures is a necklace made up of 26 different kinds of gemstones, and the length of the…
/** 题目:hdu3613 Best Reward 链接:http://acm.hdu.edu.cn/showproblem.php?pid=3613 题意:有一个字符串,把他切成两部分. 如果这部分是回文串,那么他的值为所有字母的权值和.否则这部分值为0:这两部分的值和为该切法的权值. 求最大的切法的权值. 思路: 如果能够判断[0,i],[i,n-1]是一个回文串(0<=i<n)那么就可以枚举i,计算切割位置为i时候两部分的贡献和. 取最大的. 利用O(n)的算法求最长回文子串的做法获得…
一. KMP 1 找字符串x是否存在于y串中,或者存在了几次 HDU1711 Number Sequence HDU1686 Oulipo HDU2087 剪花布条 2.求多个字符串的最长公共子串 POJ3080 Blue Jeans HDU1238 Substrings 3.next数组的应用 1) 求循环节 HDU3746 Cyclic Nacklace HDU1358 Period POJ2406 Power Strings HDU3374 String Problem 2) 利用next…
首先,在谈到Manacher算法之前,我们先来看一个小问题:给定一个字符串S,求该字符串的最长回文子串的长度.对于该问题的求解.网上解法颇多.时间复杂度也不尽同样,这里列述几种常见的解法. 解法一       通过枚举S的子串.然后推断该子串是否为回文.因为S的子串个数大约为latex=\dpi{100}&space;\fn_jvn&space;N^2"> \dpi{100}&space;\fn_jvn&space;N^2" title="…
题意: 将一段字符串 分割成两个串 如果分割后的串为回文串,则该串的价值为所有字符的权值之和(字符的权值可能为负数),否则为0. 问如何分割,使得两个串权值之和最大 思路: 首先了解扩展kmp 扩展KMP:给出模板串A和子串B,长度分别为lenA和lenB,要求在线性时间内,对于每个A[i](0<=i<=lenA-1),求出A[i..lenA-1]与B的最长公共前缀长度,记为ex[i](或者说,ex[i]为满足A[i..i+z-1]==B[0..z-1]的最大的z值). 根据上一篇文章我们可知…
最近做完了kuangbin的一套关于kmp的题目(除了一道字典树的不会,因为还没学字典树所以先放放),做个总结.(kuangbin题目的链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=70325#problem/A) 说实话,kmp这个东西真的理解了很久,因为网上模板的下标都不一样,而且讲解的部分和代码实现又有点差别.话说当初看到一个比较好的博客忘记保存了..= = 首先给个最简单的题目:http://oj.acm.zstu.ed…
KMP算法: kmp示例代码: void cal_next(char *str, int *next, int len) { next[0] = -1;//next[0]初始化为-1,-1表示不存在相同的最大前缀和最大后缀 int k = -1;//k初始化为-1 for (int q = 1; q <= len-1; q++) { while (k > -1 && str[k + 1] != str[q])//如果下一个不同,那么k就变成next[k],注意next[k]是小…