hdoj 3336 Count the string【kmp算法求前缀在原字符串中出现总次数】
2015-07-23 16:40
204 查看
Count the string
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6062 Accepted Submission(s): 2810
[align=left]Problem Description[/align]
It is well known that AekdyCoin is good at string problems as well as number theory problems. When given a string s, we can write down all the non-empty prefixes of this string. For example:
s: "abab"
The prefixes are: "a", "ab", "aba", "abab"
For each prefix, we can count the times it matches in s. So we can see that prefix "a" matches twice, "ab" matches twice too, "aba" matches once, and "abab" matches once. Now you are asked to calculate the sum of the match times for all the prefixes. For "abab", it is 2 + 2 + 1 + 1 = 6.
The answer may be very large, so output the answer mod 10007.
[align=left]Input[/align]
The first line is a single integer T, indicating the number of test cases.
For each case, the first line is an integer n (1 <= n <= 200000), which is the length of string s. A line follows giving the string s. The characters in the strings are all lower-case letters.
[align=left]Output[/align]
For each case, output only one number: the sum of the match times for all the prefixes of s mod 10007.
[align=left]Sample Input[/align]
1
4
abab
[align=left]Sample Output[/align]
6
#include<stdio.h> #include<string.h> #define mod 10007 #define MAX 200010 char p[MAX]; int f[MAX]; int dp[MAX]; void getfail() { int i,j; f[0]=f[1]=0; int len=strlen(p); for(i=1;i<len;i++) { j=f[i]; while(j&&p[i]!=p[j]) j=f[j]; f[i+1]=p[i]==p[j]?j+1:0; } } int main() { int n,m,j,i,s,t; scanf("%d",&t); while(t--) { scanf("%d",&n); scanf("%s",p); getfail(); s=0; dp[0]=0; for(i=1;i<=n;i++) { dp[i]=(dp[f[i]]%mod+1)%mod; s=(s%mod+dp[i]%mod)%mod; } printf("%d\n",s); } return 0; }
相关文章推荐
- (转).NET技术大系概览 (迄今为止最全的.NET技术栈)
- 第17/24周 悲观并发控制(Pessimistic Concurrency)
- Canvas createLinearGradient API
- web前端 c标签的使用之<c:forEach>和<c:if test="">
- 使用OpenMP并行处理图像产生冲突的问题
- MySQL的随机数函数rand()的使用技巧
- 最大流之预流推进
- 【异常】R语言使用library("XLConnect"):计算机丢失jvm.dll
- Android 抽屉效果的导航菜单实现
- decorator & generator & iterator
- 龙之森林项目进程
- 浅谈android应用性能之内存(转)
- CentOS 6+Hadoop 2.6.0分布式集群安装
- BaseActivity框架搭建
- 解析XML文件的两种方法
- HDU 2026 首字母变大写
- Maven--要点笔记
- MySQL Study之--MySQL schema_information数据库
- 推荐Eclipse插件:Eclipse Color Theme
- linux Centos iptables 8080