題意:首先給個t:有幾組測試資料
對於每個測試資料:給乙個數字m為串的長度,給一串m個字元長度的串
求:對於串的每乙個字首,其在串中出現次數的總和並mod10007(在這裡出錯了)
題目給了乙個例子:對於4長度的串abab ,有"a","ab","aba","abab"共四個字首
「a「出現了2次,"ab" : 2,"aba":1,"abab":1,所以共2+2+1+1=6次。
一開始感覺它實際上再利用kmp的性質(不懂kmp的請另行查閱資料),嘗試一下就a了,比如在某處失配會有j = next[j]的操作,
其實也就說明了字串有重疊的部分,詳見下圖說明,寫的有點亂,按順序看完應該就懂了(從黑筆看再看藍筆):
**如下:
#include
#include
#include
using namespace std;
const int maxn =200006;
const int mod = 10007;
int n,m;
int ne[maxn];
char p[maxn],arr[maxn];
void get_ne()//求next陣列
}printf("%d\n",(ans%mod));
}return 0;
}
HDU3336 KMP之next陣列妙用
本題要求所給字串的字首在整個字串中出現的次數的累加和。kmp演算法的運用。容易聯想到kmp演算法中的next陣列,當next i 0時可以理解為i前面的next個字元組成的字串對應乙個字首。此外長度為n的字串有n個字首。所以res等於n加上所有next值大於0的元素的個數。例如 abab 那麼他的字...
hdu3336解題報告
題目大意 有乙個長度為n的字串,理所當然它有n個字首,問將這個n個字首都拿去匹配,會匹配出來多少個,總數模10007。解題思路 最簡單的應該就是a自動機,多模板匹配,其實這個題的字首樹是一條直線。還有一種,就是kmp演算法,不用完整的kmp演算法,在建立失配表的時候就要開始統計,因為建立失配表的時候...
hdu 4300(kmp或者拓展kmp)
題意 亂七八糟說了一大堆,就是先給你乙個長度26的字串,對應了abcd.xyz,這是乙個密碼表。然後給你乙個字串,這個字串是不完整的 完整的應該是前半部分是加密的,後半部分是解密了的 然而,給你的字串一定是加密的部分 一部分解密的部分 可以是全部,也可以是沒有 讓你求出最短的完整字串 解題思路 考慮...