[NOI2014]动物园 【kmp】
生活随笔
收集整理的這篇文章主要介紹了
[NOI2014]动物园 【kmp】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
每次寫kmp都要調一萬年
這題主要兩個數組next[]next[]和num[]num[]
num[i]num[i]表示以ii結尾的前綴所能匹配的數量(可重疊的)
代碼
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<vector> using namespace std; const int L=1000010, mod=1000000007; int n, next[L], num[L], ans; char s[L];int main() {cin>>n;while(n--) {ans=1;char c=getchar(); while(c < 'a' || c > 'z') c=getchar();int cnt=0; while(c >= 'a' && c <= 'z') s[++cnt]=c, c=getchar();memset(next, 0, sizeof(next)); memset(num, 0, sizeof(num));num[1]=1;for(int i=2, j=0; i<= cnt; i++){while(j && s[i] != s[j+1]) j=next[j];if(s[i] == s[j+1]) j++; next[i]=j; num[i]=num[j]+1;//printf("%d %d\n", next[i], num[i]);} for(int i=2, j=0; i <= cnt; i++){while(j && s[i] != s[j+1]) j=next[j]; if(s[i] == s[j+1]) ++j;while(j*2 > i) j=next[j]; ans=((long long)ans*(num[j]+1))%mod;}printf("%d\n", ans);}return 0; }轉載于:https://www.cnblogs.com/zerolt/p/9260879.html
總結
以上是生活随笔為你收集整理的[NOI2014]动物园 【kmp】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单细胞数据初步处理 | drop-seq
- 下一篇: SSM框架之MyBatis3专题5:My