POJ 3461(模式匹配数&覆盖函数)
2012-11-15 08:22
302 查看
Language: Default Oulipo
给出两个字符串W和T,求T中有几个W子串。 Input 第一行为数据数. 每组数据有两行W和T,表示模式串和原始串. Output 对每组数据,每行一个数,表示匹配数. Sample Input 3 BAPC BAPC AZA AZAZAZA VERDI AVERDXIVYERDIAN Sample Output 1 3 0 Source BAPC 2006 Qualification |
P和Next的区别是P是指包括当前点的最长覆盖长度,Next是指匹配到i,若不满足条件,将其挪到Next[i],(P[i]<>P[next[i]],P表模式串)
证明:
之后进行查找,若查到(j=m),则j=P[j](为了下一次查找)
Program Poj3461; const maxm=10000; maxn=1000000; var tt,n,m,i,j:longint; a,b:ansistring; P:array[1..maxn] of longint; function kmp:longint; var n,m,i,j:longint; begin kmp:=0; n:=length(a);m:=length(b); P[1]:=0;j:=0; for i:=2 to m do begin while (j>0) and (b[j+1]<>b[i]) do j:=p[j]; if (b[j+1]=b[i]) then inc(j); p[i]:=j; end; j:=0; for i:=1 to n do begin while (j>0) and (b[j+1]<>a[i]) do j:=p[j]; if (b[j+1]=a[i]) then inc(j); if j=m then begin inc(kmp); j:=p[j]; end; end; end; begin readln(tt); while (tt>0) do begin readln(b); readln(a); writeln(kmp); dec(tt); end; end.
相关文章推荐
- poj 3461 KMP(模式匹配模板)
- poj 3041 Asteroids 最小顶点覆盖 && 二分匹配
- (串的模式匹配4.6.2)POJ 3461 Oulipo(KMP算法的应用——求一个单词在一行文本中的出现次数)
- POJ 1325 Machine Schedule (最小点覆盖 && 二分图最大匹配)
- poj-3041-Asteroids【二分匹配&&最小顶点覆盖】
- poj 3461 KMP模式匹配算法
- 字符串模式匹配:POJ 3461 Oulipo
- POJ 3461 Oulipo(自己YY的模式匹配算法)
- 模式匹配KMP POJ 3461
- poj 2594 Treasure Exploration(最小路径覆盖->最大匹配)
- java中静态成员函数&单例设计模式
- (字符串的模式匹配4.7.18)POJ 1961 Period(求一个串到第i个字符循环节出现的次数)
- SQL中常用模糊查询的四种匹配模式&&正则表达式
- poj3020 匈牙利算法+公式:二分无向图的最小路径覆盖 = 顶点数 - 最大二分匹配数 / 2
- poj_3461 Oulipo(KMP:找出所有模式串)
- poj 3020 Antenna Placement 匈牙利二分匹配 最小覆盖数 !!!!
- POJ 1422 && ZOJ 1525 Air Raid(有向图最小路径覆盖)
- poj 1816 Trie+DFS匹配模式串
- POJ训练计划3041_Asteroids(二分图/最小点覆盖=最大匹配)
- POJ 2195&&HDU 1533 Going Home(KM算法解决二分图最小权匹配)