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;
}
相關文章
- KMP 自動機KMP
- 新爸五年計劃 | 081 在動物園跨年
- 致敬星露谷的《超級動物園物語》,被指“致敬”過了頭
- [分散式][zookeeper]--一起走進動物園管理員分散式
- AC自動機:Tire樹+KMPKMP
- Steam一週銷量排行榜:《動物園之星》登頂
- KMPKMP
- 《動物園之星》給模擬經營遊戲帶來了什麼遊戲
- 阿里動物園新來了一頭“小蠻驢”,瞭解一下阿里
- 專訪育碧中國資料專家:用AI工具打造NPC動物園AI
- kmp——板子~~~KMP
- KMP模板KMP
- 《夢幻動物園》今日正式公測開啟!隨時隨地擼萌寵!
- 專題十六 KMP & 擴充套件KMP & Manacher【Kuangbin】KMP套件
- 聯動「中國虎園」倡導動物生態保護,《魔域》探索“遊戲+公益”更多可能遊戲
- 【字串匹配】KMP字串匹配KMP
- KMP&exKMPKMP
- KMP-字串KMP字串
- 動態規劃之 KMP 演算法詳解動態規劃KMP演算法
- 物聯網路卡在智慧校園中的應用
- 計訊物聯智慧工業園區系統平臺全面提升園區智慧化水平
- JAVA KMP 純模板JavaKMP
- FZU 2275 Game (KMP)GAMKMP
- KMP 演算法KMP演算法
- KMP演算法KMP演算法
- GBASE校園招聘,正式啟動!
- Blue Jeans 【KMP+暴力】KMP
- HDU 1711 Number Sequence(KMP)KMP
- 第三週下 kmpKMP
- 演算法之KMP演算法KMP
- 藍橋複習——KMPKMP
- [筆記](更新中)KMP筆記KMP
- 動物類Animal
- 換個戰場 + 救園行動
- 白話 KMP 演算法KMP演算法
- 【演算法】KMP初識演算法KMP
- yang-xi-jie-mi-kmpKMP
- 菜狗的KMP學習KMP