/*
巧妙地使用fail数组
根据fail数组的定义
fail[i] 有 长度为i的子串最长公共前后缀为fail[i]
比如样例 fail 0 0 1 2
那么我们维护一个ans[i]表示到i位置的时候
前i位置子串的匹配次数
比如 a b a
ans[1]=1 ans[2]=1
到ans[3]的时候 发现 a 又出现了一边 说明之前的a子串统计少了
相应的可以根据 fail找到a的位置在统计一遍就不漏了
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 200010
using namespace std;
int T,an,ans[maxn],l,fail[maxn];
char s[maxn];
void kmp_init()
{
int p=;
for(int i=;i<=l;i++)
{
while(p&&s[p+]!=s[i])
p=fail[p];
if(s[p+]==s[i])
p++;
fail[i]=p;
}
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&l);
scanf("%s",s+);
an=;//初始化害死人
memset(ans,,sizeof(ans));
memset(fail,,sizeof(fail));
kmp_init();
for(int i=;i<=l;i++)
{
ans[i]=;
if(fail[i])//如果当前的子串存在公共前后缀
//说明这个公共缀之前统计少了
ans[i]+=ans[fail[i]];
an=(an+ans[i])%;
}
printf("%d\n",an);
}
}

HUD3336的更多相关文章

随机推荐

  1. 机器学习实验报告:利用3层神经网络对CIFAR-10图像数据库进行分类

    PS:这是6月份时的一个结课项目,当时的想法就是把之前在Coursera ML课上实现过的对手写数字识别的方法迁移过来,但是最后的效果不太好… 2014年 6 月 一.实验概述 实验采用的是CIFAR ...

  2. 转:php中实现精确设置session过期时间的方法

    原文来自于:http://www.jb51.net/article/52309.htm 大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一下 ...

  3. 香港house of hello品牌包包是怎样被模仿呢?

    今天,作为女性的朋友来说,house of hello包包可能对大家都不会陌生吧,特别是一些白领阶层的女性同胞们,这个品牌比较熟悉,现在,也有网友称,这个是恶搞包包.house of hello包包原 ...

  4. Python 日期格式化 及 schwartzian排序

    __author__ = 'root' import datetime import time import copy # 12/Dec/2012:23:59:50 # 12/Sep/2012:23: ...

  5. codeforces C. Xor-tree

    http://codeforces.com/problemset/problem/430/C 题意:在一棵上有n个节点,有n-1条边,在每一个节点上有一个值0或1,然后给你一个目标树,让你选择节点,然 ...

  6. strtotime的几种用法区别

    strtotime不仅可以使用类似Y-m-d此类标准的时间/日期字符串来转化时间戳, 还可以用类似自然语言的来生成时间戳, 类似: strtotime('last day'); strtotime(' ...

  7. java学习面向对象之继承

    在我们编写程序的过程当中,会遇到这种情况: 比如现在有一个狗,他的功能有跑,有跳,有吃,有叫,属性有雌雄,大小,颜色等等,同时现在我们也有一个猫,上述功能她也有.这个时候我们写代码的时候,就得分别把上 ...

  8. CH Round #52 - Thinking Bear #1 (NOIP模拟赛)

    A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...

  9. -_-#【Node】Express 400 Error: ENOENT, open

    Express 400 Error: ENOENT, open cd alleatisland, node app来启动

  10. HDU Collect More Jewels 1044

    BFS + 状态压缩 险过 这个并不是最好的算法 但是写起来比较简单 , 可以AC,但是耗时比较多 下面是代码 就不多说了 #include <cstdio> #include <c ...