hdu 3336 Count the string
2013-07-14 00:34
399 查看
求出字符串每个前缀的出现次数之和,用KMP算法中求next数组的变种算出
每个字符最远前缀的出现位置
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int maxn = 200005, mod = 10007;
int next[maxn];
char ch[maxn];
int n, len[maxn];
void get_next()
{
int i, j = 0; next[1] = 0;
for(i = 2; i <= n; i++)
{
while(j > 0 && ch[j + 1] != ch[i])
j = next[j];
if(ch[j + 1] == ch[i]) j++;
next[i] = j;
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
int cas;
scanf("%d", &cas);
while(cas--)
{
cin>>n;
scanf("%s", ch + 1);
get_next();
int ans = 0;
fill(len, len + n + 1, 1);
for(int i = n; i >= 1; i--)
{
if(next[i])
{
len[next[i]] += len[i];
len[next[i]] %= mod;
}
ans += len[i];
ans %= mod;
}
printf("%d\n", ans);
}
return 0;
}
每个字符最远前缀的出现位置
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int maxn = 200005, mod = 10007;
int next[maxn];
char ch[maxn];
int n, len[maxn];
void get_next()
{
int i, j = 0; next[1] = 0;
for(i = 2; i <= n; i++)
{
while(j > 0 && ch[j + 1] != ch[i])
j = next[j];
if(ch[j + 1] == ch[i]) j++;
next[i] = j;
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
int cas;
scanf("%d", &cas);
while(cas--)
{
cin>>n;
scanf("%s", ch + 1);
get_next();
int ans = 0;
fill(len, len + n + 1, 1);
for(int i = n; i >= 1; i--)
{
if(next[i])
{
len[next[i]] += len[i];
len[next[i]] %= mod;
}
ans += len[i];
ans %= mod;
}
printf("%d\n", ans);
}
return 0;
}
相关文章推荐
- HDU—— 3336 Count the string
- Count the string (HDU_3336) 扩展KMP + dp
- hdu 3336 Count the string
- hdu 3336 Count the string(KMP)
- 【HDU】3336 Count the string KMP
- HDU 3336 Count the string ( KMP next函数的应用 + DP )
- hdu 3336 Count the string
- 【HDU-3336-count the string】(KMP)
- hdu 3336:Count the string(数据结构,串,KMP算法)
- hdu 3336 Count the string
- hdu 3336 (Count the string) next数组+dp
- hdu 3336 Count the string
- HDU - 3336 Count the string(kmp+dp)
- |Hdu 3336|KMP|动态规划|Count the string
- hdu 3336 Count the string -KMP&dp
- HDU 3336 Count the string
- HDU 3336 Count the string KMP
- hdu 3336 Count the string dp+KMP(失配函数)
- HDU 3336 Count the string(kmp+dp)
- HDU 3336 Count the string (记忆化搜索)