题意

计算所有S的前缀在S中出现了几次

思路

跟前缀有关的题目可以多多考虑KMP的NEXT数组

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib>
using namespace std;
char S[2000000];
int NEXT[2000000];
int dp[2000000];//dp[i] 表示 以i结尾的子串与前缀相等的个数 d[i]=d[next[i]]+1;
//一开始还以为是 d[i]=next[i]+1; 在abab这个样例中 d[3]=3 显然有重复计算了
int len;
int sum=0;
void get_next()
{
for(int i=1;i<=len;i++)
{
int p=i-1;
while(S[i]!=S[NEXT[p]+1]&&p!=0) p=NEXT[p];
if(p!=0) NEXT[i]=NEXT[p]+1; //这种不else 的写法注意清空NEXT
//else NEXT[i]=0;
}
}
int main()
{
// freopen("a.in","r",stdin);
int T;
cin>>T;
while(T--)
{
sum=0;
cin>>len;
memset(NEXT,0,sizeof(NEXT));
scanf("%s",S+1);
get_next();
for(int i=1;i<=len;i++)
{
dp[i]=dp[NEXT[i]]+1;
sum=(sum+dp[i])%10007;
}
cout<<sum<<endl;
}
}

最新文章

  1. 搭建OpenWrt开发环境(包括编译过程)
  2. arch linux 新版安装(转)
  3. Jquery元素追加和删除
  4. es6语法重构react代码
  5. BP神经网络算法学习
  6. IntelliJ IDEA的Maven项目在修改时报java.lang.OutOfMemoryError: PermGen space异常
  7. JQuery请求WebService返回数据的几种处理方式
  8. JavaScript中的memorizing技术
  9. phpmyadmin配置方式
  10. JavaScript语法作业
  11. C# winform中Show()和ShowDialog()的区别
  12. Cocos Creator—最佳构建部署实践
  13. webstorm允许移动端访问本地html页面的方法
  14. java-concurrent包
  15. TCPlayer web切换播放问题
  16. Spark基础-scala学习(七、类型参数)
  17. 6.context对象
  18. SPOJ LCS - Longest Common Substring 字符串 SAM
  19. 11.2 正睿停课训练 Day15
  20. Java 5- Java 修饰符

热门文章

  1. HDU4496_D-City(并查集删边/逆向)
  2. CCS v5 无法启动解决办法及Launchpad仿真器电脑无法识别解决方法
  3. CLR via C# - CLR模型
  4. python os模块文件相关
  5. UITableView总忘记的
  6. uvA Flooded!
  7. hdu3998 Sequence(最大流,LIS)
  8. OS X EI Capitan 10.11.4中sudo无法起作用的解决方法
  9. YII Framework学习教程-YII的Model-开发规范-路径别名-命名空间
  10. [C++程序设计]基于对象的程序设计 基于对象的程序设计