模板:擴充套件kmp,用extend[i]儲存 主串 s[i.....n-1]與 模式串 t的最長公共字首的長度
using
namespace
std;
intne[
maxn
],extend
[maxn
];
void
ekmp
(chars,
chart)
//s為主串,t為模版串
}
j=0
;
while(j
<
len1&&j
<
len&&s[
j]==t[
j])j++;
extend[0
]=j;
a=0
;
for(i=
1;i<
len1;i
++)
}
}
int
main
().
return
0;
}
const
intmaxn
=100010
;//字串長度最大值
int
next
[maxn
],ex
[maxn
];//ex陣列即為extend陣列
//預處理計算next陣列
void
getnext
(char
*str
)
}
}
//計算extend陣列
void
exkmp
(char*s1
,char*s2
)
}
}
hdu4333
給乙個數字字串s, 可以把s最後乙個數字移動到最前面變成另乙個數字。例如123, 經過移動依次變成312,231,123。 注意當移動次數正好和s長度相等時,s又變回了最開始的那個數字。
求這個移動過程所形成的所有字串,大於s(最初的)的數字,等於s,以及小於s的各有多少個。
擴充套件kmp能求出乙個串所有字尾串(即s[i...len])和模式串的最長公共字首。於是只要將這個串複製一遍,求出該串每個字尾與其本身的最長公共字首即可,當公共字首》=len時,顯然相等,否則只要比較下一位就能確定這個串與原串的大小關係。
至於重複串的問題,只有當這個串有迴圈節的時候才會產生重複串,用kmp的next陣列求出最小迴圈節,用長度除以最小迴圈節得到迴圈節個數,在將3個答案都除以迴圈節個數即可。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define
maxn
100005
#define
ll long
long
#definems(
a,b)
memset(a
,b,sizeof(a
))
#definefi(
a,b)
fill(a
,a+maxn,b
)
#definesf(
n)scanf
("%d",&n
)
#define
sf2(a,
b)scanf
("%d%d",&a
,&b)
#definepf(
n)printf
("%d\n",n
)
#define
ffr(i,
n)for(i=
0;ii++)
/*
s:abcdabcadcabcdcab
p: abcdcab
next:-1000001
*/
using
namespace
std;
intne[
maxn
],extend
[maxn],m
,l,r
,knext
[maxn
];
void
ekmp
(chars,
chart)
//s為主串,t為模版串
}
j=0
;
while(j
<
len1&&j
<
len&&s[
j]==t[
j])j++;
extend[0
]=j;
a=0
;
for(i=
1;i<
len1;i
++)
}
}
void
getnxt
(char*s
)else
}
}
int
main
()
getnxt(b
);
intqt=1
;
intt
=len
-knext
[len
];
if(
len%t==
0)
printf
("case %d: %d %d %d\n"
,case
++,l/qt
,m/qt
,r/qt
);
}
return
0;
}
擴充套件kmp模板
擴充套件kmp詳解 擴充套件 kmp 演算法 輔助陣列next i 表示t i,m 1 和t的最長公共字首長度 設定兩個變數,a 和 p。p 代表以 a 為起始位置的字元匹配成功的最右邊界,也就是 p 最後乙個匹配成功位置 1 模板 p5410 模板 擴充套件 kmp 例題 hdu 4333 rev...
擴充套件KMP模板
具體原理可以參考這裡 擴充套件kmp 擴充套件kmp演算法 劉毅 1 include2 include3 include4 include5 using namespace std 6const int n 1e6 5 7 8int len1,len2 9int nxt n extend n nxt...
擴充套件KMP模板(學習)
乙個算是冷門的演算法 在競賽上 不過其演算法思想值得深究。kmp的演算法思想,具體可以參考這篇 trie樹 字典樹 擴充套件kmp的模板問題 給你兩個字串s,t,長度分別為n,m。請輸出s的每乙個字尾與t的最長公共字首。雜湊是不可能的,這輩子都不可能的。mathcalac自動機?好像更不可做了。我們...