首页 > 其他分享 >P2375

P2375

时间:2024-10-22 14:10:12浏览次数:1  
标签:1000010 cnt P2375 long int ans fail

首先,这题最好的一个地方,在于它给出的关于next的讲解实在是妙极!!!!!
这题比我讲的好100倍!
赞美lg
捧lg的话到此为止,进入正文
题解

#include<bits/stdc++.h>
using namespace std;
const long long MOD=1e9+7;
int n,fail[1000010],ans[1000010];
long long cnt;
char a[1000010];
int main() {
	int T,i,j;
	scanf("%d",&T);
	while(T--) {
		scanf("%s",a);
		n=strlen(a);
		memset(fail,0,sizeof(fail));
		j=0;
		ans[0]=0;
		ans[1]=1;
		for(i=1; i<n; i++) {
			while(j&&(a[i]!=a[j])) j=fail[j];
			j+=(a[i]==a[j]);
			fail[i+1]=j;
			ans[i+1]=ans[j]+1;
		}
		j=0;
		cnt=1;
		for(i=1; i<n; i++) {
			while(j&&(a[i]!=a[j])) j=fail[j];
			j+=(a[i]==a[j]);
			while((j<<1)>(i+1)) j=fail[j];
			cnt=(cnt*(long long)(ans[j]+1))%MOD;
		}
		printf("%lld\n",cnt);
	}
}

标签:1000010,cnt,P2375,long,int,ans,fail
From: https://www.cnblogs.com/zan-mei-tai-yang/p/18492581

相关文章

  • 洛谷题单指南-字符串-P2375 [NOI2014] 动物园
    原题链接:https://www.luogu.com.cn/problem/P2375题意解读:计算字符串所有子串的不重叠相同前后缀数量。解题思路:1、KMP+暴力通过Next数组,可以计算所有子串相同前后缀的数量然后枚举Next数组,通过回跳Next[j]、Next[Next[j]-1]、Next[Next[Next[j]-1]-1]......来统计长度小于......
  • P2375 [NOI2014] 动物园
    P2375[NOI2014]动物园题意是对于每个前缀,求前缀后缀不交的且前后缀相等的前后缀数量数组,\(1\lelen\le10^6\)。考虑先求出正常的\(next\)数组,KMP\(O(len)\)求解。对于\(next'\)数组,可以由前一个数的\(next'\)数组转移,如果新数大小超过了\(\frac{i}{2}\)就跳到前......
  • 洛谷P2375 [NOI2014] 动物园
    动物园题目描述输入格式输出格式输入输出样例输入3aaaaaababcababc输出36132开始时都没看出来这是kmp板子题先看看AC代码吧#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintmaxn=1e6+10;constintmod=1e9+7;chara[maxn];in......
  • Luogu P2375 [NOI2014] 动物园
    [NOI2014]动物园题目描述近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法。某天,园长给动物们讲解KMP算法。园长:“对于一个字符串\(S\),它......
  • P2375 [NOI2014] 动物园
    求num[i],表示1~i前缀的合法子串个数(满足前后缀相等,且不重合 #include<iostream>#include<cstring>usingnamespacestd;constintN=1e6+3,mod=1e9+7;......
  • 洛谷P2375 [NOI2014] 动物园【题解】
    题目简要对于字符串\(......
  • P2375 [NOI2014] 动物园
    定义字符串的前\(i\)个字符组成的字符串中一最大子串\(T\)即使前缀也是后缀,且\(|T|\leqi/2\),则定义\(num[i]=|T|\),求\(num[i]+1\)之积\(mod\)1000000007。\(......