题意:
给一个长度为5000的ab串,问你第k大的半回文子串是什么
所谓的半回文串就是下标是奇数的位置前后相等就好了。
思路:
首先发现串的长度只有5000,可以做一个类似区间dp的预处理
处理出dp[i][j]代表第i到j子串是不是半回文子串
然后依次把原串的所有子串插入字典树,并在节点标记个数
然后最后dfs一下k个就好了
代码:
#include"cstdlib"
#inc...
分类:
其他好文 时间:
2015-08-05 14:56:17
阅读次数:
107
题目传送门 1 /* 2 题意:给一个字符串,划分成尽量少的回文串 3 区间DP:状态转移方程:dp[i] = min (dp[i], dp[j-1] + 1); dp[i] 表示前i个字符划分的最少回文串, 4 如果s[j] 到 s[i]是回文串,那么可以从...
分类:
其他好文 时间:
2015-08-05 12:17:59
阅读次数:
86
设f[x]表示得到x这个回文串的最小步数,则ans=min(n-len[x]+f[x])边界条件f[长度为0的偶回文串]=1因为翻转只会得到偶回文串,所以f[奇回文串]=该串的长度对于一个偶回文串x,设y为x去掉首尾得到的串,有f[x]=f[y]+1设y为长度不超过x的一半的x的最长回文后缀,有f[...
分类:
其他好文 时间:
2015-08-04 00:20:21
阅读次数:
443
题目地址:HDU 5340
题意:问是否能将字符串str分解为三段非空的回文串。
思路:我们根据Manacher算法对字符串进行处理,处理过程中产生的P数组,我们可以得到两个数组first和last。
first存储的是第一个回文串的半径可能值。
last存储的是第三个回文串的半径可能值。
根据first和last我们可以枚举第一个回文串和第三个回文串,然后根据半径找出第二个回文串的初始位...
分类:
编程语言 时间:
2015-08-03 17:00:40
阅读次数:
389
题目地址:HDU 3068
关于算法的详解:Manacher算法#include
#include
#include
#include
#include
#include
#include
#include
#include ...
分类:
编程语言 时间:
2015-08-03 14:47:03
阅读次数:
153
题目地址:POJ 3974
题意:求最长的回文串。
思路:同样是用Mancher算法在O(n)的时间内解决(我其实是来练练板子的#include
#include
#include
#include
#include
#include
#include <algorithm...
分类:
编程语言 时间:
2015-08-03 14:39:08
阅读次数:
99
题目链接: Hdu 3294 Girls' research题目描述: 给出一串字符串代表暗码,暗码字符是通过明码循环移位得到的,比如给定b,就有b == a,c == b,d == c,.......,a == z。问最长回文串所在区间,以及最长回文串所表示的明码。解题思路: 字符串长度[1...
分类:
其他好文 时间:
2015-08-03 11:32:28
阅读次数:
118
题目描述:
判断是否能将字符串S分成三段非空回文串。
解题思路:
基本思路:我们可以枚举第一个字符串的结尾e和第三个字符串的开始s,那么第二个字符串就是从e+1到s-1,判断第二个字符串是否为回文即可...
分类:
其他好文 时间:
2015-08-02 18:22:12
阅读次数:
195
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5340题意:判断一个字符串能否分为三个回文串解法:manacher枚举第一第三个,判断第二个。代码:#include
#include
#include
#include
#include
#include <...
分类:
其他好文 时间:
2015-08-02 13:46:51
阅读次数:
125
hdu 5340 Three Palindromes问题描述
判断是否能将字符串S分成三段非空回文串。
输入描述
第一行一个整数T,表示数据组数。T \leq 20T≤20
对于每一个组,仅包含一个由小写字母组成的串。1 \leq |S| \leq 200001≤∣S∣≤20000
输出描述
对于每一组,单行输出”Yes” 或 “No”。
输入样例
2
abc
abaadada...
分类:
其他好文 时间:
2015-08-02 11:54:08
阅读次数:
348