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