HDU 3336 Count the string (kmp+dp)
来源:互联网 发布:网站模板php 卖房网 编辑:程序博客网 时间:2024/06/05 09:12
题意:
求串的所有前缀在串中出现次数的总和
分析:
dp[i]:=前i个字符中出现以第i个字符结尾的前缀的次数
dp[i]=dp[nxt[i]]+1
即第i个字符结尾的前缀数等于以第next[i]个字符为结尾的前缀数加上它自己本身,这俩是同一个字符
i: 1 2 3 4
c: a b a b
dpi: 1 1 2 2
dp数组正好是原来那个倒过来的
代码:
//// Created by TaoSama on 2015-10-30// Copyright (c) 2015 TaoSama. All rights reserved.////#pragma comment(linker, "/STACK:1024000000,1024000000")#include <algorithm>#include <cctype>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iomanip>#include <iostream>#include <map>#include <queue>#include <string>#include <set>#include <vector>using namespace std;#define pr(x) cout << #x << " = " << x << " "#define prln(x) cout << #x << " = " << x << endlconst int N = 2e5 + 10, INF = 0x3f3f3f3f, MOD = 1e4 + 7;int n, nxt[N], dp[N];char s[N];int getNxt() { nxt[0] = -1; int i = 0, j = -1; while(i < n) { if(j == -1 || s[i] == s[j]) nxt[++i] = ++j; else j = nxt[j]; }}void add(int& x, int y) {if((x += y) >= MOD) x %= MOD;}int main() {#ifdef LOCAL freopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin);// freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout);#endif ios_base::sync_with_stdio(0); int t; scanf("%d", &t); while(t--) { scanf("%d%s", &n, s); getNxt(); int ans = 0; for(int i = 1; i <= n; ++i) { dp[i] = dp[nxt[i]] + 1; add(ans, dp[i]); } printf("%d\n", ans); } return 0;}
0 0
- HDU 3336 Count the string(KMP+dp)
- [HDU 3336]Count the String[kmp][DP]
- HDU 3336 Count the string KMP+DP
- hdu 3336 Count the string KMP+DP
- HDU 3336 Count the string kmp+dp
- hdu -- 3336 Count the string(KMP + dp)
- hdu 3336 Count the string 【kmp + dp】
- hdu 3336 Count the string KMP+DP
- HDU 3336(Count the string)DP+KMP
- HDU 3336 Count the string (KMP + DP)
- hdu 3336 Count the string(KMP+dp)
- hdu 3336 Count the string (kmp + dp)
- Hdu-3336 Count the string(KMP + DP)
- HDU 3336 Count the string 【KMP】【dp】
- HDU 3336 Count the string (kmp+dp)
- hdu 3336 Count the string(KMP+dp)
- hdu 3336 Count the string (DP+kmp)
- hdu 3336 count the string(KMP+dp)
- Hadoop五大守护进程的三种启动与关闭方式
- Android 实现长按录音获取实时音量显示图片(类似微信)
- js里alert()返回值
- Hive 1.2.1安装部署
- Implement Queue using Stacks leetcode
- HDU 3336 Count the string (kmp+dp)
- android power-wakelock kernel
- Strut2:OGNL表达式
- 51.VC(Custom)-__super简介
- Android知识图表
- Android的Alarm对齐唤醒机制
- 500 Internal Server Error错误问题解决办法
- ECharts--基于力导向布局图功能更完善的人物关系图插件扩展-节点样式和点击事件2
- Android 最简单的圆形头像