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 ...