【BZOJ】3670: [Noi2014]动物园(KMP)
题目
传送门:QWQ
分析
像求next一样求num。
第二次求next时加上不超过一半的条件。
时间复杂度: $ \huge O ( n ) $
代码
// luogu-judger-enable-o2 #include <bits/stdc++.h> using namespace std; const int MOD=; int n, nxt[], num[]; char s1[]; long long ans; void kmp() { ans=; nxt[]=-; num[]=; for(int i=,j;i<=n;i++) { for(j=nxt[i-]; j>= && s1[i]!=s1[j+]; j=nxt[j]); j++; nxt[i]=j; num[i]=num[j]+; } for(int i=,j=-;i<=n;i++) { for(; j>= && s1[i]!=s1[j+]; j=nxt[j]); j++; //nxt[i]=j; for(;(j<<)>i;j=nxt[j]); ans*=num[j]+;ans%=MOD; } } int main() { int T; scanf("%d",&T); while(T--) { scanf("%s",s1+); n=strlen(s1+)+; kmp(); printf("%lld\n",ans); } return ; }View Code
【洛谷】P3919 【模板】可持久化数组(主席树)
相关推荐
数据与算法之美 2020-06-10
yuanran0 2020-05-11
shawsun 2020-05-10
bluewelkin 2020-05-06
shenwenjie 2020-04-11
horizonheart 2020-03-05
nurvnurv 2020-02-02
hanyujianke 2020-01-12
Happyunlimited 2019-11-08
yjsflxiang 2019-04-04
极乐净土 2014-07-17
dushine00 2019-06-26
duyifei0 2019-06-21
tieshow 2013-01-18
Wendywubowen 2018-07-07
数据与算法之美 2019-04-29
PythonBiglove 2015-07-18
大腕绿茶 2013-05-03