首页 > 其他 > 详细

poj3974 Palindrome(Manacher最长回文)

时间:2019-05-10 19:54:57      阅读:138      评论:0      收藏:0      [点我收藏+]

之前用字符串hash+二分过了,今天刚看了manacher拿来试一试。

这manacher也快太多了%%%

技术分享图片

技术分享图片

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 const int maxn = 1e6 + 5;
 8 char s[maxn], tmp[2*maxn];
 9 int p[maxn*2], id, mx, ans;
10 inline void manacher(){
11     mx = id = ans = 0;
12     memset( p, 0, sizeof(p) );
13     for( int i=1; tmp[i]; i++ ){
14         p[i] = mx>i ? min(p[2*id-i], mx-i):1;
15         while( tmp[i+p[i]]==tmp[i-p[i]] ) p[i]++;
16         if( mx<i+p[i] ){
17             mx = i+p[i];
18             id = i;
19         }
20     }
21     for( int i=1; tmp[i]; i++ )
22         if( ans<p[i] ) ans = p[i];
23 }
24 
25 int main(){
26     int kase = 0;
27     while( ~scanf("%s", s+1) && s[1]!=E ){
28         int len = strlen(s+1);
29         tmp[0] = $;
30         int j = 2;
31         for( int i=1; i<=len; i++, j+=2 ){
32             tmp[j+1] = tmp[j-1] = #;
33             tmp[j] = s[i];
34         }
35         tmp[j+2] = 0;
36         manacher();
37         printf("Case %d: %d\n", ++kase, ans-1);
38     }
39 
40     return 0;
41 }
42 /*
43 Sample Input
44 
45 abcbabcbabcba
46 abacacbaaaab
47 END
48 Sample Output
49 
50 Case 1: 13
51 Case 2: 6
52 */

 

poj3974 Palindrome(Manacher最长回文)

原文:https://www.cnblogs.com/WAautomaton/p/10846366.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!