摘要: 对于每一组数据(b,a),统计b在a中出现的次数。一道裸的KMP匹配题,你用BM我也没意见。View Code 1 program pku3461(input,output); 2 var 3 a,b : ansistring; 4 next : array[0..20000] of longint; 5 cases : longint; 6 i,j,k : longint; 7 answer : longint; 8 begin 9 readln(cases);10 for k:=1 to cases do11 beg... 阅读全文
posted @ 2012-03-23 16:50 Codinginging 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 求一个字符串中每一个前缀用s’^k(k>1)表示的所有情况。要求输出该前缀的结束位置和k值。和2406有基本相同的方法,求出next数组后枚举i,看(1-i) mod(i-next[i])是否大于1,满足条件就输出即可。View Code 1 program pku1961(input,output); 2 var 3 n : longint; 4 ch : char; 5 s : ansistring; 6 next : array[0..1000100] of longint; 7 i,j : longint; 8 ... 阅读全文
posted @ 2012-03-23 16:39 Codinginging 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 有一个长度不超过400000的字符串s,求满足{既是s的前缀,又是s的后缀}的字串,输出每一个串的起始位置。首先,它本身满足条件,接下来,用KMP求出next数组,每次去掉next[i]到i的一段字符,剩余字串仍满足条件,直到找到头为止。View Code 1 program pku2752(input,output); 2 var 3 s : ansistring; 4 next : array[0..500000] of longint; 5 answer : array[0..500000] of longint; 6 total : lo... 阅读全文
posted @ 2012-03-23 16:23 Codinginging 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 有一个字符串,长度在1000000以内,求它最大的链节个数,即把s表示成s'+s'+s'······。求s'的个数。用KMP的思想,求出next数组,然后可以用手画方法发现从next[length(s)]到length(s)间的字符串可以不断向前推,只要这个长度能被总长度整除,它就是最大链节长度,否则就是1.View Code 1 program pku2406(input,output); 2 var 3 i,j : longint; 4 s : ansistring; 5 next : array[ 阅读全文
posted @ 2012-03-23 16:11 Codinginging 阅读(550) 评论(0) 推荐(0) 编辑