测试地址:Reincarnation
题目大意:给定一个字符串sss,q" role="presentation" style="position: relative;">qqq个询问,每次询问sss的一个子串s[l,r]" role="presentation" style="position: relative;">s[l,r]s[l,r]s[l,r]内有多少个不同的子串。
做法:本题需要用到后缀自动机。
注意到一个子串就是一个后缀的一个前缀,而对于求一个串所有前缀中有多少个不同的子串显然可以用后缀自动机维护,所以我们对每个后缀都建一遍后缀自动机,同时求出ans(l,r)ans(l,r)ans(l,r),然后O(1)O(1)O(1)回答询问即可。时间复杂度为O(|s|2)O(|s|2)O(|s|^2)。
以下是本人代码:

#include <bits/stdc++.h>
using namespace std;
int T,n,m,tot,last,totans,ans[2010][2010];
int pre[4010],len[4010],ch[4010][26];
char s[2010];void extend(char c)
{int p,q,np,nq;np=++tot;len[np]=len[last]+1;p=last;while(p&&!ch[p][c-'a']) ch[p][c-'a']=np,p=pre[p];if (!p) pre[np]=1;else{q=ch[p][c-'a'];if (len[p]+1==len[q]) pre[np]=q;else{nq=++tot;len[nq]=len[p]+1;pre[nq]=pre[q];for(int i=0;i<26;i++)ch[nq][i]=ch[q][i];while(p&&ch[p][c-'a']==q) ch[p][c-'a']=nq,p=pre[p];pre[np]=pre[q]=nq;}}totans+=len[np]-len[pre[np]];last=np;
}int main()
{scanf("%d",&T);while(T--){scanf("%s",s);n=strlen(s);for(int i=1;i<=n;i++){tot=last=1;pre[1]=len[1]=0;memset(ch,0,sizeof(ch));totans=0;for(int j=i;j<=n;j++){extend(s[j-1]);ans[i][j]=totans;}}scanf("%d",&m);for(int i=1;i<=m;i++){int l,r;scanf("%d%d",&l,&r);printf("%d\n",ans[l][r]);}}return 0;
}

【HDU4622】Reincarnation-后缀自动机相关推荐

  1. HDU - 4622 Reincarnation(后缀自动机-查询区间本质不同子串个数)

    题目链接:点击查看 题目大意:给出一个长度为 n 的字符串,再给出 q 个询问,每次询问需要回答区间 [ l , r ] 内有多少个本质不同的子串 题目分析:和回文自动机那个题目一样,n * n 预处 ...

  2. HDU4622(后缀自动机)

    题目:Reincarnation 题意:给定一个字符串,然后再给定Q个询问,每个询问是一个区间[l,r],问在这个字符串区间中有多少个不同的子串. 后缀自动机模版题: #include <ios ...

  3. 【POJ1509】Glass Beads 【后缀自动机】

    题意 给出一个字符串,求它的最小表示法. 分析 这个题当然可以用最小表示法做啦!但是我是为了学后缀自动机鸭! 我们把这个字符串长度乘二,然后建SAM,然后在SAM上每次跑最小的那个字母,找出长度为n的 ...

  4. bzoj 2946 [Poi2000]公共串——后缀自动机

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946 对每个串都建一个后缀自动机,然后 dfs 其中一个自动机,记录同步的话在别的自动机上走 ...

  5. 后缀自动机 ---- P3804 【模板】后缀自动机(求每个等价类最长串的出现次数)

    后缀自动机一些关键点 首先后缀自动机上面每个节点都是一个等价类并且是最长的字符串的结尾 后缀自动机上的fail链反建就是parent tree,下面是SAM和Parent tree的构造 对于这道模板 ...

  6. 洛谷P3966 [TJOI2013]单词(后缀自动机)

    传送门 统计单词出现次数--为啥大家都是写AC自动机的嘞--明明后缀自动机也能做的说-- 统计出现次数这个就直接按长度排序然后做个dp就好,这是SAM的板子的要求啊,不提了 然后考虑怎么让所有串之间隔 ...

  7. hihocoder 后缀自动机专题

    一.后缀自动机基本概念的理解 1.首先后缀自动机的状态是由子串的endpos来决定的 子串的endpos是指一个子串可以在原字符串的哪些位置进行匹配, endpos构成的不同集合划分成不同的状态 关于 ...

  8. BZOJ3998: [TJOI2015]弦论(后缀自动机,Parent树)

    Description 对于一个给定长度为N的字符串,求它的第K小子串是什么. Input 第一行是一个仅由小写英文字母构成的字符串S 第二行为两个整数T和K,T为0则表示不同位置的相同子串算作一个. ...

  9. 从零开始の后缀自动机

    后缀自动机,一个处理字符串问题的神器.听起来很神圣,貌似很难写.其实代码实现并不复杂,萌新估计都能学会. 以前听学长们讲过好多次也看过陈立杰的课件,都不是很明白.今天终于弄明白了,就写一个让大家都能看 ...

  10. 【BZOJ3926】[Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机

    [BZOJ3926][Zjoi2015]诸神眷顾的幻想乡 Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝 ...

最新文章

  1. mysql连接卡死,很多线程sleep状态,导致CPU中mysqld占用率极高(问题原因还待考证)...
  2. 深度学习模型压缩方法(3)-----模型剪枝(Pruning)
  3. 微软应用商店_微软自家的软件也放弃Windows 10
  4. android getwindow 在fragment不能使用,Android Fragment 布局使用 fitsSystemWindows = true 无效解决方案...
  5. 将 WinForms 应用从 .NET Core 3.0 升级到 3.1
  6. Linux本地yum源配置以及使用yum源安装各种应用程序
  7. k8s核心技术-配置管理_Secret_以变量形式使用Secret文件_以及以数据卷的形式使用Secret文件---K8S_Google工作笔记0036
  8. Docker镜像构建
  9. 网络工程制图论文计算机,计算机工程制图教学的课业评价-计算机工程论文-计算机论文.docx...
  10. 关于U盘物理读写锁失效解决(只读状态):工具解锁或U盘量产
  11. 卷积神经网络python实例,python卷积神经网络图像
  12. darkest dark theme 插件对应eclipse各版本安装方法
  13. python发送超大附件邮件_【Python】发送邮件功能浅析
  14. 这些月薪过万的公司你准备好了吗
  15. 唐平中讲座笔记 Reinforcement mechanism design 20171107
  16. Gluster源代码阅读3--MGMT Xlator
  17. VM虚拟机更换网络环境后无法连接网络
  18. js实现页面表格内容的复制粘贴填充,实现快速填写
  19. 缩略图查看器(Thumbs.DB Viewer) 1.2.0.80
  20. JavaScript 逆向爬取实战

热门文章

  1. mysql替换后的zzigu_MySQL导入数据报错Got a packet bigger than‘max_allowed_packet’bytes错误的解决方法...
  2. C++构造函数的default和delete
  3. 行人属性识别:Grouping Attribute Recognition for Pedestrian with Joint Recurrent Learning
  4. webpack-theme-color-replacer webpack插件 实现web项目 全局修改主题颜色
  5. 腾讯低代码(lowcode)行列布局
  6. T229470 A. 小智的疑惑(暴力)
  7. windows升级卡在配置更新96%
  8. 产生式系统Python PySide2的GUI界面
  9. 饥荒联机版服务器控制台本地和在线,服务器,控制台饥荒服务器控制台命令,指令,常用命令,管理命令 - Welcome to XiongTianQi.CN...
  10. 饥荒联机版服务器控制台本地和在线,《饥荒》多人联机版控制台开启方法详解...