HDU 3336 输出包括从1到len长 字符串前缀的总个数(+DP)
2015-05-12 17:03
344 查看
Sample Input
1
4
abab
Sample Output
6
输出包括从1到len长 字符串前缀的总个数
abab:包括2个a,2个ab,1个aba,1个abab
# include <cstdio> # include <cstring> using namespace std; char S[200010] ; int next[200010] ; int dp[200010] ; int len ; void getNext() { int j, k; j = 0; k = -1; next[0] = -1; while(j < len) if(k == -1 || S[j] == S[k]) next[++j] = ++k; else k = next[k]; } int main () { int T ; scanf("%d" , &T); while (T--) { scanf("%d" , &len) ; scanf("%s" , S) ; getNext() ; dp[0] = 0 ; int ans = 0 ; int i ; for (i = 1 ; i<= len ; i++) { dp[i] = dp[next[i]] + 1 ; dp[i] %= 10007 ; ans += dp[i] ; ans %= 10007 ; } printf("%d\n" , ans) ; } return 0 ; }View Code
相关文章推荐
- HDU 3336 Count the string(KMP:串前缀匹配自身+DP)
- 问题:求两个字符串的最长公共子串。 要求:输入两个字符串,输出它们的最长公共子串,包括长度。 设计: 设计一个类 String,包括一个 len(字符串长度)和字符串指针 s。另有如下成员函数: ·
- Hdu 3336 Count the string (KMP+DP 前缀出现次数和)
- HDU 3336 Count the string (求前缀在字符串中出现的次数和)
- Hdu 5782 Cycle(给你两个长度相同的字符串,对于长度为i的前缀,如果这两个字符串的前缀是循环相等的,那么输出1,否则输出0)
- hdu 1358 Period(给定一个字符串,求有多少个前缀(包括自己本身),它是由k(k>2,并且尽量大)个循环节组成的)
- Hdu 3336 Count the string(求给定字符串含前缀的数量)
- HDU 3336 Count the String(KMP+DP)
- hdu 1224 简单dp +恶心的输出
- 编写一个int string_len(char *s),返回字符串s的字符长度(不包括\0)
- hdu 5317 RGCDQ (2015多校第三场第2题)素数打表+前缀和相减求后缀(DP)
- hdu 3336 KMP+DP
- hdu 4632 子字符串统计的区间dp
- HDU - 3336 Count the string —— next数组求相同前缀后缀个数
- hdu 3336(kmp+dp)
- hdu 4295 4 substrings problem DP 字符串
- hdu 1251 字符串前缀 子典树
- 练习2-3 编写函数htoi(s),把由16进制数字组成的字符串(包含可选的前缀0X或0x)转换成与之等价的整形值。字符串中允许包含的数字包括:0 ~ 9, a ~ f,A ~ F。
- Count the string - HDU 3336(next+dp)
- hdu 4632 子字符串统计的区间dp