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

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

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

14abab

Sample Output

6

思路:此题关键还是next数组的使用,代表着第i个前面的字符串前缀与后缀的匹配

#include 
using namespace std;#include
string s;int n,Next[200005];void getNext(){ int len = n; Next[0]=-1; int i=0,j=-1; while (i
>t; while (t--) { cin>>n; cin>>s; getNext(); int sum=0; for(int i=1;i<=n;i++) { int j=i; while(j) { sum = (sum+1)%10007; j = Next[j]; } } cout<
<

 

转载于:https://www.cnblogs.com/aerer/p/9931015.html

你可能感兴趣的文章
[置顶] Android入门教程------Android工程目录结构介绍
查看>>
ev||event 和event||ev
查看>>
linux-log-files/
查看>>
JAVA环境变量的配置
查看>>
【转】Linux下tcp连接断开后不释放的解决办法
查看>>
[T-ARA][20090729]
查看>>
Webpack快速入门 (v3.7.1)
查看>>
Vue控制路由滚动行为
查看>>
MyBatis的动态SQL详解
查看>>
HTTP的应用httpclient 和线程
查看>>
pytest七:assert断言
查看>>
linux shell 判断空字符串的几种方法!
查看>>
C语言博客作业--函数
查看>>
PHP截取中英文混合字符
查看>>
HTA - OnKeyDown
查看>>
【洛谷P1816 忠诚】线段树
查看>>
Sa身份登陆SQL SERVER失败的解决方案
查看>>
iOS SQLite 读书笔记
查看>>
第四次作业
查看>>
函数对象 函数
查看>>