像这样直接写就会超时
for(int i=2;i<=n;i++){
j=kmp[i]
while((j<<1)>i)j=kmp[j];
ans=(((num[j]+1)%mod)*(ans%mod))%mod;
}
这样就好了
for(int i=2;i<=n;i++){
while(j&&str[j+1]!=str[i])
j=kmp[j];
if(str[j+1]==str[i])j++;
while((j<<1)>i)j=kmp[j];
ans=(((num[j]+1)%mod)*(ans%mod))%mod;
}
dalao们能教教我为什么会这样吗