【HDU5421】Victor and String(回文树)

题面

Vjudge

大意:

你需要支持以下操作:

动态在前端插入一个字符

动态在后端插入一个字符

回答当前本质不同的回文串个数

回答当前回文串个数

题解

回文树前端插入的操作,学一学感觉并不难?

额外维护一下一个前端插入的\(last\)

然后就和后端插入一模一样,前端插入时就是前端插入的\(last\)

唯一会产生的影响的就是当前字符差完后,

发现现在的\(last\)就是整个串,那么就要更新另外一端的\(last\)为当前这一端的\(last\)

#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 222222
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;
}
struct Node
{
int son[26],ff;
int len,dep;
}t[MAX];
char s[MAX];
ll ans;
int tot,l,r,pre,suf,n;
void init()
{
l=1e5,r=l-1;memset(s,'\0',sizeof(s));
memset(t,0,sizeof(t));ans=0;
t[pre=suf=0].ff=t[tot=1].ff=1;t[1].len=-1;
}
void extend(int c,int n,int &last,int op)
{
int p=last;
while(s[n]!=s[n-op*t[p].len-op])p=t[p].ff;
if(!t[p].son[c])
{
int v=++tot,k=t[p].ff;t[v].len=t[p].len+2;
while(s[n]!=s[n-op*t[k].len-op])k=t[k].ff;
t[v].ff=t[k].son[c];t[p].son[c]=v;
t[v].dep=t[t[v].ff].dep+1;
}
last=t[p].son[c];ans+=t[last].dep;
if(t[last].len==r-l+1)pre=suf=last;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
init();
while(n--)
{
int opt=read();
if(opt<=2)
{
char c=getchar();
if(opt==1)s[--l]=c,extend(c-97,l,pre,-1);
else s[++r]=c,extend(c-97,r,suf,1);
}
else if(opt==3)printf("%d\n",tot-1);
else printf("%lld\n",ans);
}
}
return 0;
}

【HDU5421】Victor and String(回文树)的更多相关文章

  1. hdu5421 Victor and String 回文树(前后插入)

    题目传送门 题意:对一个字符串支持四种操作,前插入字符,后插入字符,询问本质不同的回文串数量和所有回文串的数量. 思路: 就是在普通回文树的基础上,维护suf(最长回文后缀)的同时再维护一个pre(最 ...

  2. HDU 5157 Harry and magic string(回文树)

    Harry and magic string Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  3. The Preliminary Contest for ICPC Asia Xuzhou 2019 G. Colorful String 回文树

    签到提: 题意:求出每一个回文串的贡献 (贡献的计算就是回文串不同字符的个数) 题解: 用回文树直接暴力即可 回文树开一个数组cost[ ][26] 和val[ ] 数组: val[i]表示回文树上节 ...

  4. HDU 6599 I Love Palindrome String (回文树+hash)

    题意 找如下子串的个数: (l,r)是回文串,并且(l,(l+r)/2)也是回文串 思路 本来写了个回文树+dfs+hash,由于用了map所以T了 后来发现既然该子串和该子串的前半部分都是回文串,所 ...

  5. 2019 徐州网络赛 G Colorful String 回文树

    题目链接:https://nanti.jisuanke.com/t/41389 The value of a string sss is equal to the number of differen ...

  6. HDOJ 5421 Victor and String 回文串自己主动机

    假设没有操作1,就是裸的回文串自己主动机...... 能够从头部插入字符的回文串自己主动机,维护两个last点就好了..... 当整个串都是回文串的时候把两个last统一一下 Victor and S ...

  7. HDU 5421 Victor and String (回文自动机)

    题目大意:让你维护一个字符串,支持在开头结尾插入字符,以及查询本质不同的回文串数量以及回文串总数量 开头结尾都维护一个$last$指针,如果插入新字符后,整个串是一个回文串,就把另一个$last$赋值 ...

  8. HDU 5421 Victor and String(回文树)

    Victor and String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/262144 K (Java/Othe ...

  9. HDU5421 Victor and String 和 APIO2014 回文串

    两道差不多的题,都是回文自动机right集合处理相关. Victor and String Victor loves to play with string. He thinks a string i ...

随机推荐

  1. 【转】libxml2 如何获得某个节点的所有信息

    网址:http://bbs.csdn.net/topics/380115580 顶楼: 我的需求是这样的,我使用libxml2从内存中解析一个xml文件,需要修改某个节点下的一个子节点,修改完成之后, ...

  2. Java 注解的概念与种类

    Java 注解的概念与种类 一,什么是注解 注解和XML文件都是常用的,对web项目进行配置性描述的方式. 举个最简单的例子,对于一个Servlet,比如LoginServlet,采用如下方式: @W ...

  3. Codeforces 680D - Bear and Tower of Cubes

    680D - Bear and Tower of Cubes 思路:dfs+贪心,设剩余的体积为res,存在a,使得a3 ≤ res,每次取边长为a的立方体或者边长为a-1的立方体(这时体积上限变成a ...

  4. 机器学习 Numpy库入门

    2017-06-28 13:56:25 Numpy 提供了一个强大的N维数组对象ndarray,提供了线性代数,傅里叶变换和随机数生成等的基本功能,可以说Numpy是Scipy,Pandas等科学计算 ...

  5. Jquery实现光棒效果

    <script type="text/javascript"> $(function () { var $bac; $("#d1 tr").hove ...

  6. WPF操作RichTextBox

    http://www.cnblogs.com/wzwyc/p/6291895.html

  7. (转)TeamViewer三种许可证的区别是什么?

    xu言: 这几天在使用teamview对它的许可证做了一些了解,看到这个好像是官方的写的挺不错.留作收藏 PS:https://www.uret.in/  顺便也发现了一个不错的网站 很多想要购买Te ...

  8. TCP三次握手(待细研究)

    xu言: 看到一张不错清晰的Tcp三次握手图,收藏 Initiator  发起人 Receiver  接收者 LISTENING 状态xx服务启动后首先处于侦听(LISTENING)状态. ESTAB ...

  9. Win7 默认.lnk打开方式全是别的程序 还原的办法

    Xu言: no zuo no die~ 今天,一个朋友问我,他电脑桌面上点任何东西都是提示下载... - -||| 本以为是中毒了,然后上去看了一眼..发现他自己把所有.lnk 的默认打开方式选择了搜 ...

  10. ural Ambitious Experiment 树状数组

    During several decades, scientists from planet Nibiru are working to create an engine that would all ...