• 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); 
    }
    

      

  • 相关阅读:
    react dva 的 connect 与 @connect
    es6 解构赋值 新认知/新习惯
    从一到面试题了解js异步机制:setTimeout 和 Pronmise
    React.Fragment 的作用:代替div作为外层
    解决dva dispatch yield生成器函数中异常中断,无法继续调用的问题
    vue v-model 与 组件化的表单组件如何沟通
    react 事件绑定的2种常用方式
    React dva 的使用
    gulp#4.0 Did you forget to signal async completion?
    gulp#4.0
  • 原文地址:https://www.cnblogs.com/qt666/p/7163418.html
Copyright © 2020-2023  润新知