bzoj3670: [Noi2014]動物園(kmp)
題目傳送門
。
解法:
感覺上是kmp。
然後碼了個kmp。
然後看成了num[i]是字首字尾不相交的最長長度。
然後樣例出來個144。
發現並沒有什麼問題。
然後發現看錯題了。。
然後我就在此基礎上繼續做。
s[i]表示字首等於字尾且可以相交有多少個串。
那麼求出最長不相交長度。這個的s就是num[i]了。
程式碼實現:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
int p[1100000],next[1100000],s[1100000];
char ss[1100000];const ll mod=1000000007;
int main() {
int T;scanf("%d",&T);
while(T--) {
scanf("%s",ss+1);int len=strlen(ss+1);
p[1]=0;s[1]=1;
for(int i=2;i<=len;i++) {
int j=p[i-1];
while(ss[j+1]!=ss[i]&&j>0)j=p[j];
if(ss[j+1]==ss[i])j++;p[i]=j;
s[i]=s[j]+1;
}
next[1]=0;
for(int i=2;i<=len;i++) {
if(p[i]<=i/2)next[i]=p[i];
else {
int j=next[i-1];
if(j>0&&(ss[j+1]!=ss[i]||(j+1)>i/2))j=p[j];
if(ss[j+1]==ss[i])j++;next[i]=j;
}
}ll ans=1;
for(int i=1;i<=len;i++)ans=ans*ll(s[next[i]]+1)%mod;
printf("%lld\n",ans);
}
return 0;
}
相關文章
- BZOJ 3670 [Noi2014]動物園 (KMP next陣列應用)KMP陣列
- KMPKMP
- KMP模版KMP
- kmp——板子~~~KMP
- KMP模板KMP
- POJ 3461 kmpKMP
- KMP&exKMPKMP
- 【字串匹配】KMP字串匹配KMP
- [分散式][zookeeper]--一起走進動物園管理員分散式
- 專題十六 KMP & 擴充套件KMP & Manacher【Kuangbin】KMP套件
- KMP Algorithm 字串匹配演算法KMP小結KMPGo字串匹配演算法
- hihocoder 1015 KMP演算法 (KMP模板)KMP演算法
- KMP 自動機KMP
- JAVA KMP 純模板JavaKMP
- KMP演算法KMP演算法
- KMP 演算法KMP演算法
- 《動物園之星》給模擬經營遊戲帶來了什麼遊戲
- FZU 2275 Game (KMP)GAMKMP
- 藍橋複習——KMPKMP
- 演算法之KMP演算法KMP
- 第三週下 kmpKMP
- HDU 2594 (KMP入門)KMP
- [筆記](更新中)KMP筆記KMP
- 專訪育碧中國資料專家:用AI工具打造NPC動物園AI
- 阿里動物園新來了一頭“小蠻驢”,瞭解一下阿里
- WP8.1/Win10版《動物園大亨:朋友》面臨關服Win10
- KMP字串模式匹配詳解KMP字串模式
- 白話 KMP 演算法KMP演算法
- KMP演算法詳解KMP演算法
- KMP(The Knuth-Morris-Pratt Algorithm)KMPGo
- 解讀KMP演算法KMP演算法
- Blue Jeans 【KMP+暴力】KMP
- 【演算法】KMP初識演算法KMP
- 【模板】【字串】KMP演算法字串KMP演算法
- 模式匹配-KMP演算法模式KMP演算法
- yang-xi-jie-mi-kmpKMP
- 菜狗的KMP學習KMP
- KMP+狀態轉移KMP