hdoj 3336 Count the string 【KMP】
来源:互联网 发布:淘宝客新建导购推广 编辑:程序博客网 时间:2024/06/06 09:43
Count the string
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7175 Accepted Submission(s): 3314
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
求前缀在字符串中出现的总次数~
AC代码:
#include<cstdio>#include<cstring>#include<cmath>#include<queue>#define mem(a, b) memset(a, (b), sizeof(a))#define Wi(a) while(a--)#define Si(a) scanf("%d", &a)#define Pi(a) printf("%d\n", (a))#define INF 0x3f3f3f3f#define mod 10007#define LL longlong#include<algorithm>using namespace std;const int N = 200000+10;char s[N];int p[N];int ls;int num[N];void getp(){int i = 0, j = -1;p[i] = j;while(i < ls){if(j==-1||s[i]==s[j]){i++, j++;p[i] = j;}else j = p[j];}}int main(){int t; Si(t);Wi(t){Si(ls);scanf("%s", s);getp();int sum = 0;num[0] = 0;for(int i = 1; i <= ls; i++){num[i] = (num[p[i]]%mod + 1) % mod;sum = (sum%mod + num[i]) % mod;}Pi(sum);}return 0;}
0 0
- 【KMP】 HDOJ 3336 Count the string
- HDOJ 3336 Count the string KMP
- HDOJ Count the string 3336【KMP】
- hdoj 3336 Count the string 【KMP】
- HDOJ 题目3336Count the string(kmp)
- hdoj 3336 Count the string
- HDOJ 3336 Count the string
- HDOJ 3336 Count the string
- HDOJ 3336 Count the string
- Count the string + KMP
- Count the string (KMP)
- hdoj 3336 Count the string 【kmp求 所有前缀 在原串中出现的次数 总和】
- hdu 3336 Count the string KMP
- KMP Hdu-3336 Count the string
- HDU 3336 Count the string(KMP 理解)
- HDU 3336 Count the string KMP
- HDU 3336 Count the string(KMP+dp)
- [HDU 3336]Count the String[kmp]
- Android总结篇系列:Activity Intent Flags及Task相关属性
- Vim 粘贴板
- linux 信号 回收子进程
- 6.1、贝叶斯分类器
- windows apache服务器配置多域名
- hdoj 3336 Count the string 【KMP】
- 简单验证码的有关知识点
- Objective-C简介
- 最简洁的nginx反向代理例子配置
- Word Search II 题解
- 快速排序中分区算法的延伸——划分多个区间
- 可变长参数示例
- C++自制Redis 数据库(九) 详细数据库存储结构,线程相关已解决
- URAL1534 进球