X-man

导航

2013年5月10日 #

Manacher算法(O(n)回文子串算法)

摘要: 1.奇数的回文串和偶数的回文串统一起来考虑先在每两个相邻字符中间插入一个分隔符,当然这个分隔符要在原串中没有出现过。一般可以用‘#’分隔。这样就非常巧妙的将奇数长度回文串与偶数长度回文串统一起来考虑了(见下面的一个例子,回文串长度全为奇数了)2.用一个辅助数组P记录以每个字符为中心的最长回文串的信息。3.P[id]记录的是以字符str[id]为中心的最长回文串,当以str[id]为第一个字符,这个最长回文串向右延伸了P[id]个字符原串:w aa bwsw f d 新串: # w # a # a #b # w # s # w # f # d #辅助数组P: 1 2 1 2 3 2 1 ... 阅读全文

posted @ 2013-05-10 19:43 雨钝风轻 阅读(231) 评论(0) 推荐(0) 编辑

[USACO 1.5.3]特殊的质数肋骨

摘要: #include<stdio.h>#include<string.h>#include<math.h>int m;int a[4]={2,3,5,7};int b[4]={1,3,7,9};int c[10];int number;bool visit[101000];int prime[100000];int n=100000;int init_prim(){ memset(visit,true,sizeof(visit)); int num=0; for(int i=2;i<=n;i++) { if(visit[i]==true) { ... 阅读全文

posted @ 2013-05-10 14:36 雨钝风轻 阅读(391) 评论(0) 推荐(0) 编辑