博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU3336-Count the string(KMP)
阅读量:6957 次
发布时间:2019-06-27

本文共 1940 字,大约阅读时间需要 6 分钟。

Count the string

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4449    Accepted Submission(s): 2094


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.
 

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.
 

Output
For each case, output only one number: the sum of the match times for all the prefixes of s mod 10007.
 

Sample Input
 
1 4 abab
 

Sample Output
 
6
 

Author
foreverlin@HNU
 
题目意思:统计所曾经缀在原串出现的次数
思路:利用KMP next函数,next函数统计的就是前缀跟自身字符串匹配的信息。
#include 
#include
#include
#include
#include
#include
#include
using namespace std;const int maxn = 200000+10;const int MOD = 10007;char str[maxn];int next[maxn],n;void getNext(){ next[0] = next[1] = 0; int ans = n; for(int i = 1; i < n; i++){ int j = next[i]; while(j && str[i] !=str[j]) j = next[j]; if(str[j] == str[i]){ next[i+1] = j+1; }else{ next[i+1] = 0; } }}int main(){ int ncase; cin >> ncase; while(ncase--){ scanf("%d%s",&n,str); getNext(); int ans = n%MOD; for(int i = 1; i <= n; i++){ if(next[i] !=0){ ans = (ans+1)%MOD; } } printf("%d\n",ans); } return 0;}

转载地址:http://zzmil.baihongyu.com/

你可能感兴趣的文章
那些被疯狂追求的女孩,后来怎么样了?
查看>>
(转载)Windows 7 Ultimate(旗舰版)SP1 32/64位官方原版下载(2011年5月12日更新版)...
查看>>
孟岩:通证(token)和通证经济的目的在于改善现有经济的效率性
查看>>
杜鹃演绎奢华春装大片
查看>>
mongoDb
查看>>
HTML框架1
查看>>
servlet:启动的时机
查看>>
笔记:2016-06-23
查看>>
5.22心得
查看>>
2017年11月27日高级软件测试技术例会记录
查看>>
最终增强
查看>>
C++ STL(1)
查看>>
socket编程
查看>>
浏览器渲染原理解析
查看>>
搭建个人网站需要的三个步骤
查看>>
matlab建立双坐标
查看>>
Linux操作命令(六)
查看>>
1、压滤机工作原理
查看>>
设计模式学习总结-桥接模式(Bridge Pattern)
查看>>
halcon算子翻译——copy_image
查看>>