本题中我参考了 Flying_hq 的题解实现(核心代码在下面),其统计答案的指针每次只向上跳一次 fail(跳的次数是另一个指针跳等差数列的跳的次数)。我直接把跳 fail 的上限次 r 数改为 40 也通过了本题。
这个统计答案的指针为什么不是在等差数列上跳呢/yiw
for(int i=1;i<=40;i++){
if(r==-1)break;
int t=0,b=0;
if(val[r+1].c==c)t=len(r+1);
if(t>x){
t=x;b=1;
}if(t>W){
(res+=ask(val[r].r+t,t-W))%=mod;
W=t;
}if(t==x&&!b){
P[tp]=r+1;break;
}
r=P[r];
}