zoukankan      html  css  js  c++  java
  • 【CF245H】Queries for Number of Palindromes(回文树)

    【CF245H】Queries for Number of Palindromes(回文树)

    题面

    洛谷

    题解

    回文树,很类似原来一道后缀自动机的题目
    后缀自动机那道题
    看到(n)的范围很小,但是(Query)很多
    所以提前预处理出每一段(l,r)的答案
    时间复杂度(O(n^2+Q))

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<set>
    #include<map>
    #include<vector>
    #include<queue>
    using namespace std;
    #define ll long long
    #define RG register
    #define MAX 5050
    inline int read()
    {
        RG int x=0,t=1;RG char ch=getchar();
        while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
        if(ch=='-')t=-1,ch=getchar();
        while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
        return x*t;
    }
    int ans[MAX][MAX];
    char s[MAX];
    char ch[MAX];
    struct PT
    {
    	struct Node
    	{
    		int son[26];
    		int len,ff;
    	}t[MAX];
    	int last,tot,dep[MAX];
    	void init()
    	{
    		t[tot=1].len=-1;
    		t[last=0].ff=t[1].ff=1;
    	}
    	void clear()
    	{
    		memset(t,0,sizeof(t));
    		memset(dep,0,sizeof(dep));
    		init();
    	}
    	void extend(int c,int n,char *s)
    	{
    		int p=last;
    		while(s[n-t[p].len-1]!=s[n])p=t[p].ff;
    		if(!t[p].son[c])
    		{
    			int v=++tot,k=t[p].ff;
    			while(s[n-t[k].len-1]!=s[n])k=t[k].ff;
    			t[v].ff=t[k].son[c];
    			t[v].len=t[p].len+2;
    			t[p].son[c]=v;
    			dep[v]=dep[t[v].ff]+1;
    		}
    		last=t[p].son[c];
    	}
    }PT;
    int main()
    {
    	scanf("%s",s+1);
    	int n=strlen(s+1);
    	for(int i=1;i<=n;++i)
    	{
    		PT.clear();
    		for(int j=i;j<=n;++j)ch[j-i+1]=s[j];
    		for(int j=i;j<=n;++j)
    		{
    			PT.extend(ch[j-i+1]-97,j-i+1,ch);
    			ans[i][j]=ans[i][j-1]+PT.dep[PT.last];
    		}
    	}
    	int Q=read();
    	while(Q--)
    	{
    		int l=read(),r=read();
    		printf("%d
    ",ans[l][r]);
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    Ubuntu学习
    Django之 Views组件
    Django之 admin组件
    Django之 Models组件
    Django之 url组件
    递归
    python 之 编码
    Python 之 Restful API设计规范
    Django之实现登录随机验证码
    git &github 快速入门
  • 原文地址:https://www.cnblogs.com/cjyyb/p/8465063.html
Copyright © 2011-2022 走看看