KMP模板 和入門題

2021-09-10 07:06:22 字數 1843 閱讀 9582

hdu1711

題意就是給你兩個序列,讓你求b序列在a序列第一次出現(完全相同)的下標 

本題就是kmp的模板題,將i指標指向a串,將j指標指向b串,如果匹配就繼續下一位的匹配,如果不匹配,將j跳轉到next[j],繼續向前匹配。

#include#define inf 0x3fffffff

#define ll long long

#define mem(ar,num) memset(ar,num,sizeof(ar))

#define me(ar) memset(ar,0,sizeof(ar))

#define lowbit(x) (x&(-x))

#define ios ios::sync_with_stdio(false)

#define debug cout<> t;

while(t--)

return 0;

}

hdu1686

題意就是求b串在a串中的出現次數(可重疊 )

#include#define inf 0x3fffffff

#define ll long long

#define mem(ar,num) memset(ar,num,sizeof(ar))

#define me(ar) memset(ar,0,sizeof(ar))

#define lowbit(x) (x&(-x))

#define ios ios::sync_with_stdio(false)

#define debug cout<> t;

while(t--)

return 0;

}

hdu2087

題意就是求b串在a串中的出現次數(不可重疊) 

#include#define inf 0x3fffffff

#define ll long long

#define mem(ar,num) memset(ar,num,sizeof(ar))

#define me(ar) memset(ar,0,sizeof(ar))

#define lowbit(x) (x&(-x))

#define ios ios::sync_with_stdio(false)

#define debug cout<> s1 && s1 != "#")

return 0;

}

hdu3746

kmp求最小迴圈節,這道題如果理解了next陣列應該可以解出來,n-next[n]就是常為n的陣列最小迴圈節

#include#define inf 0x3f3f3f3f

#define ll long long

#define mem(ar,num) memset(ar,num,sizeof(ar))

#define me(ar) memset(ar,0,sizeof(ar))

#define lowbit(x) (x&(-x))

#define ios ios::sync_with_stdio(false)

#define debug cout

const int maxn = 1e6 + 5;

int next[maxn];

char str[maxn];

char mo[maxn];

int n1, n2;

void getnext()

return ;

}int main() else

}return 0;

}

幾道KMP模板題

記錄下kmp學習過程 注意 這裡的模板s1是文字串s2是匹配串 模式串 hdu1711 number sequence鏈結 最小匹配位置 include include include include using namespace std typedef long long ll const ll...

拓展KMP演算法 入門 模板

擴充套件kmp演算法,圖很形象,寫的也很清晰,下面的模板就是出自該部落格文章。拓展kmp是求母串s長度為n和子串t長度為m,求s的每乙個字尾子串與t的字首子串匹配的最長長度。求解模式串t的next陣列,這個函式和下面的函式幾乎相同 void getnext string t,int m,int ne...

KMP模板以及入門題型總結

include include define maxn 100010 using namespace std int next maxn char s maxn char p maxn void prekmp char x,int m,int next return ans 計數 不可重複 int ...