标题被工藤新一拼死保护/泪目

求好元素

枚举 i , 把所有的 \(a_{i-1}+a_j(j<i)\) 存入哈希表 , 只算 \(a_{i-1}\) 是因为只算了从 \(i-1\) 移到 \(i\) 的贡献
然后再枚举 \(p (p<i)\) 判断 \(a_i-a_p\) 的值是否在哈希表里

回文分区

从两边往中间找

unsigned long long val(int l,int r){
	return h[r]-h[l-1]*p[r-l+1];
}
                int lstl=1,lstr=len;
		for(int l=1,r=len;l<r;l++,r--){
			if(val(lstl,l)==val(r,lstr)){
				ans+=2,lstl=l+1,lstr=r-1;
			}
		}  

周期长度和

到 i 的周期长度: \(i-p[i]\)

所以,如果 n%(n-p[n])==0 则有循环节

子串拆分

前缀数组

一个结论:
一个串 \((1-i)\) 前后缀相等的个数 = 从 \(i\) 开始跳 \(p\) 一直跳到 \(j=0\) 的跳的次数

所以可以记一个 cnt 数组 \(cnt[i+1]=cnt[j]+1\)

posted @ 2024-09-18 19:35  小惰惰  阅读(6)  评论(0编辑  收藏  举报
/* 鼠标点击求赞文字特效 */