HDU4622(后缀自动机)
题目:Reincarnation
题意:给定一个字符串,然后再给定Q个询问,每个询问是一个区间[l,r],问在这个字符串区间中有多少个不同的子串。
后缀自动机模版题:
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
const int N=5010;
struct State
{
State *pre,*go[26];
int step;
void clear()
{
pre=0;
step=0;
memset(go,0,sizeof(go));
}
int calc()
{
if(pre==0) return 0;
return step-pre->step;
}
}*root,*last;
State statePool[N*2],*cur;
void init()
{
cur=statePool;
root=last=cur++;
root->clear();
}
int tot;
void Insert(int w)
{
State *p=last;
State *np=cur++;
np->clear();
np->step=p->step+1;
while(p&&!p->go[w])
p->go[w]=np,p=p->pre;
if(p==0)
{
np->pre=root;
tot+=np->calc();
}
else
{
State *q=p->go[w];
if(p->step+1==q->step)
{
np->pre=q;
tot+=np->calc();
}
else
{
State *nq=cur++;
nq->clear();
memcpy(nq->go,q->go,sizeof(q->go));
tot-=p->calc()+q->calc();
nq->step=p->step+1;
nq->pre=q->pre;
q->pre=nq;
np->pre=nq;
tot+=p->calc()+q->calc()+np->calc()+nq->calc();
while(p&&p->go[w]==q)
p->go[w]=nq, p=p->pre;
}
}
last=np;
}
int ans[N][N];
char s[N];
void work()
{
scanf("%s",s);
int n=strlen(s);
for(int i=0;i<n;++i)
{
init();
tot=0;
for(int j=i;j<n;++j)
{
Insert(s[j]-'a');
ans[i][j]=tot;
}
}
int nQ;
scanf("%d", &nQ);
while (nQ--)
{
int l, r;
scanf("%d%d", &l, &r);
--l,--r;
printf("%d\n", ans[l][r]);
}
}
int main()
{
int T;
cin>>T;
while(T--)
work();
return 0;
}
HDU4622(后缀自动机)相关推荐
- 【POJ1509】Glass Beads 【后缀自动机】
题意 给出一个字符串,求它的最小表示法. 分析 这个题当然可以用最小表示法做啦!但是我是为了学后缀自动机鸭! 我们把这个字符串长度乘二,然后建SAM,然后在SAM上每次跑最小的那个字母,找出长度为n的 ...
- bzoj 2946 [Poi2000]公共串——后缀自动机
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946 对每个串都建一个后缀自动机,然后 dfs 其中一个自动机,记录同步的话在别的自动机上走 ...
- 后缀自动机 ---- P3804 【模板】后缀自动机(求每个等价类最长串的出现次数)
后缀自动机一些关键点 首先后缀自动机上面每个节点都是一个等价类并且是最长的字符串的结尾 后缀自动机上的fail链反建就是parent tree,下面是SAM和Parent tree的构造 对于这道模板 ...
- 洛谷P3966 [TJOI2013]单词(后缀自动机)
传送门 统计单词出现次数--为啥大家都是写AC自动机的嘞--明明后缀自动机也能做的说-- 统计出现次数这个就直接按长度排序然后做个dp就好,这是SAM的板子的要求啊,不提了 然后考虑怎么让所有串之间隔 ...
- hihocoder 后缀自动机专题
一.后缀自动机基本概念的理解 1.首先后缀自动机的状态是由子串的endpos来决定的 子串的endpos是指一个子串可以在原字符串的哪些位置进行匹配, endpos构成的不同集合划分成不同的状态 关于 ...
- BZOJ3998: [TJOI2015]弦论(后缀自动机,Parent树)
Description 对于一个给定长度为N的字符串,求它的第K小子串是什么. Input 第一行是一个仅由小写英文字母构成的字符串S 第二行为两个整数T和K,T为0则表示不同位置的相同子串算作一个. ...
- 从零开始の后缀自动机
后缀自动机,一个处理字符串问题的神器.听起来很神圣,貌似很难写.其实代码实现并不复杂,萌新估计都能学会. 以前听学长们讲过好多次也看过陈立杰的课件,都不是很明白.今天终于弄明白了,就写一个让大家都能看 ...
- 【BZOJ3926】[Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机
[BZOJ3926][Zjoi2015]诸神眷顾的幻想乡 Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝 ...
- 【洛谷 P3975】 [TJOI2015]弦论(后缀自动机)
题目链接 建出后缀自动机. T=0,每个子串算一次,否则每个子串算该子串的\(endpos\)集合大小次. 用\(f[i]\)表示结点\(i\)表示的\(endpos\)集合大小,则\(f[i]\)为 ...
最新文章
- Codeigniter文件上传类型不匹配错误
- Flutter配置好后,在Android Studio中找不到设备,no devices
- 单臂路由与三层交换机—Vecloud微云
- cllocationmanager 获取不了 的原因_我的世界:天启之境如何获取“人鱼手链”?一段人鱼姬的爱情故事...
- linux task进程跟踪,如何对Hadoop作业的某个task进行debug单步跟踪
- 使用aSpotCat控制您的Android应用权限
- C语言中的fopen函数
- 子弹短信 android,子弹短信精简版
- Centos6.8下SVN安装
- 前端页面——Cookie与Session有什么差别
- vscode settings.json配置
- jquery.validation.js 表单验证
- 分享Netsparker - Community Edition运用程序。
- Linux下载GEO数据,最简单的IGS精密星历等数据下载方法PPT
- java是如何调用native方法?hotspot源码分析必会技能
- MDM数据分析功能说明
- 小学计算机教师面试试题及答案,2019下半年小学信息技术教师资格证面试真题及答案汇总...
- 计算机已将连接限制为某网络,提示此计算机当前已将连接限制为xxx的解决办法...
- Monte-Carlo(蒙特卡罗)算法
- Python爬取QQ音乐评论数据
热门文章
- 异常-异常捕获的完整语法
- Nginx_日志文件讲解
- Android从url不产生cookie,如何从android.webkit.CookieManager获取所有cookie或cookie的URL
- python制作软件封面_用python给MP3加封面图片,修改作者,专辑等信息
- mybatis-plus根据多个字段排序_Mybatis Plus学习笔记(逻辑删除/动态填充/常用插件)...
- postman404报错解决方案
- iOS相关,过年回来电脑上的证书都失效了
- C++不区分大小写比较string类似CString.compareNoCase
- Managed Metadata Service介绍系列 之三
- 用PHP做负载均衡指南