zoukankan      html  css  js  c++  java
  • bzoj 2565: 最长双回文串

    Description

    顺序和逆序读起来完全一样的串叫做回文串。比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同)。
    输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串。

    Input

    一行由小写英文字母组成的字符串S

    Output

    一行一个整数,表示最长双回文子串的长度。

    Sample Input

    baacaabbacabb

    Sample Output

    12

    HINT

    样例说明

    从第二个字符开始的字符串aacaabbacabb可分为aacaa与bbacabb两部分,且两者都是回文串。

    对于100%的数据,2≤|S|≤10^5


    2015.4.25新加数据一组

    Source

    2012国家集训队Round 1 day2

    正反建立回文自动机,然后可以正着可以求出以i为结尾的最长回文串,反着可以求出以i为开头的最长回文串,

    然后枚举两个拼起来即可;

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int N=200050;
    int nxt[N][30][2],fail[N][2],len[N][2],le,last,tt[2],ans[N][2];
    char s[2][N];
    void insert(int n,int c,int flag){
    	int cur=last;
    	while(s[flag][n-len[cur][flag]-1]!=s[flag][n]) cur=fail[cur][flag];
    	if(!nxt[cur][c][flag]){
    		int now=++tt[flag],la=fail[cur][flag];
    		len[now][flag]=len[cur][flag]+2;
    		while(s[flag][n-len[la][flag]-1]!=s[flag][n]) la=fail[la][flag];
    		fail[now][flag]=nxt[la][c][flag],nxt[cur][c][flag]=now;
    	}
    	last=nxt[cur][c][flag];ans[n][flag]=len[last][flag];
    }
    int main(){
    	scanf("%s",s[0]+1);le=strlen(s[0]+1);
    	for(int i=1;i<=le;i++) s[1][le-i+1]=s[0][i];
    	len[++tt[0]][0]=-1,len[++tt[1]][1]=-1;
    	fail[0][0]=1;fail[0][1]=1;
    	for(int i=1;i<=le;i++) insert(i,s[0][i]-'a'+1,0);
    	for(int i=1;i<=le;i++) insert(i,s[1][i]-'a'+1,1);
    	int Ans=0;
    	for(int i=1;i<le;i++) Ans=max(Ans,ans[i][0]+ans[le-i][1]);
    	printf("%d
    ",Ans); 
    }
    

      

  • 相关阅读:
    Understanding about Baire Category Theorem
    Isometric embedding of metric space
    Convergence theorems for measurable functions
    Mindmap for "Principles of boundary element methods"
    Various formulations of Maxwell equations
    Existence and uniqueness theorems for variational problems
    Kernels and image sets for an operator and its dual
    [loj6498]农民
    [luogu3781]切树游戏
    [atAGC051B]Three Coins
  • 原文地址:https://www.cnblogs.com/qt666/p/7163418.html
Copyright © 2011-2022 走看看