题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3336

题意就是求串s的前缀的个数和;

例如:abab

前缀 个数

a     2

ab    2

aba   1

abab  1

总数:6

dp[i] 表示前面的字符以s[i-1]结尾的前缀个数;上列中dp[4]=2(以最后一个字符b结尾的前缀) {abab,ab};

可以看出增加一个字母会产生一个新的前缀,那就是整个串,之前的前缀就是Next[i]的位置所对应的dp,即dp[Next[i]];

所以dp[i] = dp[Next[i]] + 1;-_-主要是仔细的想一下,有点绕;

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std; const int N = 2e6+;
const int mod = ; char s[N];
int dp[N], n, Next[N]; void GetNext()
{
int i=,j=-;
Next[] = -;
while(i<n)
{
if(j==- || s[i]==s[j])
Next[++i] = ++j;
else
j = Next[j];
}
}
int main()
{
int T, sum;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
scanf("%s", s);
GetNext();
memset(dp, , sizeof(dp));
sum = ;
for(int i=; i<=n; i++)
{
dp[i] = dp[Next[i]] + ;
sum = (sum + dp[i]) % mod;
}
printf("%d\n", sum);
}
return ;
}

最新文章

  1. jquery点击隐藏和显示
  2. 医院管理者必须知道的医院客户关系管理(CRM)
  3. dojo事件驱动编程之事件绑定
  4. HTML5实践 -- 使用CSS3 Media Queries实现响应式设计
  5. 宫格布局实例(注意jquery的版本号要统一)
  6. Git最佳实践
  7. Form_Form页面跳转的四种方式(open_form, call_form, new_form, fnd_function)详解(汇总)
  8. POJ 2311 Cutting Game(Nim博弈-sg函数/记忆化搜索)
  9. 【Sort Colors】cpp
  10. marquee 标签的使用详情
  11. CSS定位:相对定位、绝对定位和固定定位(relative absolute fixed)
  12. 安卓网络请求之——OkHttp学习
  13. winform 制作圆形图片框
  14. override the hashcode and equals method in java
  15. Java curator操作zookeeper获取kafka
  16. 微信小程序开发教程目录
  17. 【Luogu1973】仓配置(贪心,线段树)
  18. 兄弟连学python---网络简介
  19. [20190324]奇怪的GV$FILESPACE_USAGE视图.txt
  20. FastReport 套打全攻略

热门文章

  1. 回文串dp
  2. HTTP Header User-Agent的ctf
  3. xmapp+netbeans调试
  4. SQL select查询原理--查询语句执行原则&lt;转&gt;
  5. [工具使用] 如何访问github
  6. TensorFlow基础笔记(2) minist分类学习
  7. crc32 冗余加密校验
  8. JavaScript有关的10个怪癖和秘密(转)
  9. ThinkPHP项目笔记之MVC篇
  10. Python使用pycurl获取http的响应时间