博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【HDU 3336】Count the string(KMP+DP)
阅读量:6293 次
发布时间:2019-06-22

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

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

14abab

Sample Output

6

题解


考虑kmp算法中next数组的定义,即

\[f[i]=k\;whilea[0....k]==a[k+1...j]\]
那么我们就可以产生一个dp方程
设dp[i]:已a[i]结尾的前缀数
\[dp[i]=dp[f[i]]+1\]

参考代码

import java.io.*;import java.util.*;public class Main{      static int N=200000+10;      static int f[]=new int [N];      static char a[]=new char[N];      static void getFail(char b[],int m) {          int j=0;          f[1]=0;          for(int i=2;i<=m;i++) {              while(j>0&&b[j+1]!=b[i]) j=f[j];              if(b[j+1]==b[i]) j++;              f[i]=j;          }      }      static int dp[]=new int[N];      public static void main(String[] args){          InputReader in=new InputReader(System.in);          PrintWriter out=new PrintWriter(System.out);          int T=in.nextInt();          while(T--!=0) {              int n=in.nextInt();             String str=in.next();             for(int i=0;i

转载于:https://www.cnblogs.com/zsyacm666666/p/7284018.html

你可能感兴趣的文章
Outlook 2003命令行参数开关详解
查看>>
mysql中文乱码问题的解决方案
查看>>
Redhat7开机图形或文字界面
查看>>
Linux state 方式 安装nginx 服务
查看>>
LNMP(php-fpm的pool,慢执行日志,定义open_bashdir,php-fpm进程管理
查看>>
Flask rst 文档转换为html格式文件
查看>>
python 安装第三方库pygame
查看>>
Linux下的grep命令详解
查看>>
磁盘系统管理
查看>>
Linux下ftp+ssl实现ftps
查看>>
JavaScript基础
查看>>
Nginx之反向代理与负载均衡实现动静分离实战
查看>>
Object类型转换为long或者Long
查看>>
16位流应用与代码统计器例题
查看>>
linux内核中符号地址的获取
查看>>
内存对齐的问题
查看>>
分析动态代理给Spring事务埋下的坑
查看>>
从不用 try-catch 实现的 async/await 语法说错误处理
查看>>
Zabbix Python API 应用实战
查看>>
DC学院学习笔记(六):数据库和SQL语言简述
查看>>