[KMP][HDU3336][Count the string]
2024-08-24 01:13:48
题意
计算所有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;
}
}
最新文章
- 搭建OpenWrt开发环境(包括编译过程)
- arch linux 新版安装(转)
- Jquery元素追加和删除
- es6语法重构react代码
- BP神经网络算法学习
- IntelliJ IDEA的Maven项目在修改时报java.lang.OutOfMemoryError: PermGen space异常
- JQuery请求WebService返回数据的几种处理方式
- JavaScript中的memorizing技术
- phpmyadmin配置方式
- JavaScript语法作业
- C# winform中Show()和ShowDialog()的区别
- Cocos Creator—最佳构建部署实践
- webstorm允许移动端访问本地html页面的方法
- java-concurrent包
- TCPlayer web切换播放问题
- Spark基础-scala学习(七、类型参数)
- 6.context对象
- SPOJ LCS - Longest Common Substring 字符串 SAM
- 11.2 正睿停课训练 Day15
- Java 5- Java 修饰符
热门文章
- HDU4496_D-City(并查集删边/逆向)
- CCS v5 无法启动解决办法及Launchpad仿真器电脑无法识别解决方法
- CLR via C# - CLR模型
- python os模块文件相关
- UITableView总忘记的
- uvA Flooded!
- hdu3998 Sequence(最大流,LIS)
- OS X EI Capitan 10.11.4中sudo无法起作用的解决方法
- YII Framework学习教程-YII的Model-开发规范-路径别名-命名空间
- [C++程序设计]基于对象的程序设计 基于对象的程序设计