假如一个串有10610^6106个aaa
那么每一次跳kmpkmpkmp都只让jjj减少一
while( (j<<1)>i ) j = kmp[j];
那每次都这么跳不会超时吗...
毕竟每次都要跳i2\frac{i}{2}2i左右次啊
for(int i=2,j=0;i<=n;i++) { while( j&&a[i]!=a[j+1] ) j = kmp[j]; if( a[i]==a[j+1] ) j++; while( (j<<1)>i ) j = kmp[j]; ans = ans*(num[j]+1)%mod; }