zoukankan      html  css  js  c++  java
  • BZOJ2342: [Shoi2011]双倍回文

    对每个可能成为本质不同回文子串的串判一下就好了,复杂度$O(n)$。

    #include<cstdio>
    const int N=5e5+5;
    int n,s,f[N];
    char z[N];
    int main(){
    	scanf("%d ",&n);
    	fread(z+1,1,n,stdin);
    	z[0]='^';
    	for(int i=1,j=0;i<=n;++i){
    		int k=j+f[j];
    		if(i<k&&f[j*2-i]<k-i)
    			f[i]=f[j*2-i];
    		else{
    			f[j=i]=i<k?k-i:0;
    			while(z[i-f[i]]==z[i+f[i]+1]){
    				int l=++f[i]/2;
    				if(l>s&&f[i-l]>=l)s=l;
    			}
    		}
    	}
    	printf("%d
    ",s*4);
    }
    
  • 相关阅读:
    个人博客
    个人博客
    5.4
    4.30
    4.29
    4.28
    4.27
    4.26
    4.25
    4.24
  • 原文地址:https://www.cnblogs.com/f321dd/p/6631854.html
Copyright © 2011-2022 走看看