hdu 3336(KMP算法的应用)
来源:互联网 发布:如何安装广联达软件 编辑:程序博客网 时间:2024/05/20 18:00
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3336
Count the string
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4844 Accepted Submission(s): 2294
Problem Description
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.
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.
Input
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.
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.
Output
For each case, output only one number: the sum of the match times for all the prefixes of s mod 10007.
Sample Input
14abab
Sample Output
6
#include <iostream>#include <string.h>#include <string>#include <stdio.h>const int N=200000+100;const int mod=10007;using namespace std;int n,next[N];char s[N];void get_next() //求出next[]{ int i=1,j=0; while(i<=n) { if(j==0||s[i]==s[j]) { ++i; ++j; next[i]=j; } else j=next[j]; }}int main(){ int T; cin>>T; while(T--) { scanf("%d",&n); scanf("%s",s+1); get_next(); int cnt=0; cnt=(cnt+n)%mod; for(int i=3;i<=n+1;i++) { if(next[i]>=2) { cnt=(cnt+1)%mod; } } printf("%d\n",cnt); } return 0;}
0 0
- hdu 3336(KMP算法的应用)
- HDU 3336 kmp的应用
- hdu(kmp的应用)
- HDU 1358 Period(KMP算法应用)
- HDU 3336 Count the string(KMP算法next数组的应用)
- kmp算法的应用
- hdu oj Period (kmp的应用)
- kmp算法(字符串匹配 next应用 hdu题目集合)
- KMP算法的应用1
- HDU1867-KMP算法的应用
- hdu 1711 (kmp算法)
- hdu 1711(kmp算法)
- hdu 4763 Theme Section (kmp, Next数组的应用)
- HDU 3336 KMP算法中对next数组的理解
- PKU 2406(KMP算法的灵活应用)
- KMP算法,Next跳转表的应用(1)
- UVALive 3026 period(周期) kmp算法的应用
- hdu-4763 kmp next数组的应用
- CGAffineTransform 放射变换
- HDU5001--Walk
- java连接sql server2008 r2 错误Cannot create PoolableConnectionFactory 错误
- HDU 4993 Revenge of ex-Euclid(数学题 暴力)
- 设计模式--策略模式
- hdu 3336(KMP算法的应用)
- UVA - 10054 The Necklace
- 题目1201:二叉排序树 -九度
- 创建表空间 为用户指定表空间
- Java获取客户端真实IP地址的两种方法
- epoll和select区别
- Etcd学习(三)集群搭建Clustering中Leader问题
- NSTimer基础用法
- Remove Duplicates from Sorted List