标签:cst 计算 string next har int nbsp bsp i++
居然一A了,说明对朴素的KMP还是有一定理解。
主要就是要知道next数组的作用,然后就可以计算每个i结尾的满足题意的串个数。
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<memory.h>
using namespace std;
char b[200010];
int Next[200010],L,ans;
void _next()
{
int i,k,tmp;
Next[1]=0;
for(i=2,k=0;i<=L;i++){
while(k&&b[i]!=b[k+1])k=Next[k];
if(b[i]==b[k+1]) {
k++;
}
Next[i]=k;
tmp=Next[i];
while(tmp) {
ans++;
tmp=Next[tmp];
}//计算以i结尾的个数
ans%=10007;
}
}
int main()
{
int T,i;
scanf("%d",&T);
while(T--){
scanf("%d",&L);
ans=0;
scanf("%s",b+1);
_next();
printf("%d\n",(ans+L)%10007);
}
return 0;
}
标签:cst 计算 string next har int nbsp bsp i++
原文地址:http://www.cnblogs.com/hua-dong/p/7640546.html