字符串系列之回文树(模板+例题)(未更完)

回文树网上比较经典的模板为:Palindromic Tree——回文树【处理一类回文串问题的强力工具】,个人见过的也多为这个,网上还有一个邻接表的模板,较为省空间。原地址为回文树(附模板题URAL-1960)。回文树的有关视频讲解成电在B站的算法讲堂也有。

例题Ural1960:题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1960

题意:给定一个字符串,求每次插入一个字符输出当前的不同本质子串。

题解:毕竟裸的回文树。每次创建一个新节点就说明多了一个不同的字符串,否则就不会新建结点,考虑一开始建立了0和-1的结点,所以每次add后的p-2就是所求。

AC代码:

/*
* @Author: 王文宇
* @Date:   2018-09-03 16:43:50
* @Last Modified by:   王文宇
* @Last Modified time: 2018-09-03 21:26:55
*/
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
const int siz = 26;
#define _for(i,a,b) for(int i=a;i<=b;i++)
struct PAM
{
	int next[maxn][siz];
	int fail[maxn];
	int num[maxn];
	int len[maxn];
	int cnt[maxn];
	int n,p,last,S[maxn];
	int sum;
	int newnode(int x)
	{
		_for(i,0,siz)next[p][i]=0;
		len[p]=x;
		num[p]=0;
		cnt[p]=0;
		return p++;
	}
	void init()
	{
		sum=0;
		p=0;
		newnode(0);
		newnode(-1);
		last=n=0;
		fail[0]=1;
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值