正题

题目链接:https://www.luogu.com.cn/problem/P6139


题目大意

求nnn个串的不同子串个数


解题思路

如何在SAMSAMSAM中插入多个字符串。
可以我们可以通过更改lastlastlast为之前的节点来做,如果插入一个之前插入过的节点就按照之前SAMSAMSAM的方法特判就好了。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=2e6+10;
ll n,m,cnt,last,len[N],fa[N],ch[N][26],ans;
char s[N];
ll Ins(ll c,ll last){ll p=last;if(ch[p][c]){ll q=ch[p][c];if(len[p]+1==len[q])return q;else{ll nq=++cnt;len[nq]=len[p]+1;memcpy(ch[nq],ch[q],sizeof(ch[nq]));fa[nq]=fa[q];fa[q]=nq;for(;p&&ch[p][c]==q;p=fa[p])ch[p][c]=nq;return nq;}}ll np=++cnt;len[np]=len[p]+1;for(;p&&!ch[p][c];p=fa[p])ch[p][c]=np;if(!p)fa[np]=1;else{ll q=ch[p][c];if(len[p]+1==len[q])fa[np]=q;else{ll nq=++cnt;len[nq]=len[p]+1;memcpy(ch[nq],ch[q],sizeof(ch[nq]));fa[nq]=fa[q];fa[q]=fa[np]=nq;for(;p&&ch[p][c]==q;p=fa[p])ch[p][c]=nq;}}return np;
}
int main()
{scanf("%lld",&m);cnt=1;for(ll i=1;i<=m;i++){last=1;scanf("%s",s);n=strlen(s);for(ll j=0;j<n;j++)last=Ins(s[j]-'a',last);}for(ll i=1;i<=cnt;i++)ans+=len[i]-len[fa[i]];printf("%lld",ans);
}

P6139-[模板]广义后缀自动机(广义 SAM)相关推荐

  1. 模板:后缀自动机(SAM)

    所谓后缀自动机,就是通过后缀建立的自动机 (逃) 请允许我先介绍一下后缀家族: (又逃) 前言 OI生涯目前为止学习的最为难以理解的算法,没有之一. 到现在也没有完全的理解. qwq 概念 定义: 后 ...

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

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

  3. BZOJ3277 串 【广义后缀自动机】

    Description 字符串是oi界常考的问题.现在给定你n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中 至少k个字符串的子串(注意包括本身). Input 第一行两个整数n, ...

  4. 【bzoj5084】hashit 广义后缀自动机+树链的并+STL-set

    题目描述 你有一个字符串S,一开始为空串,要求支持两种操作 在S后面加入字母C 删除S最后一个字母 问每次操作后S有多少个两两不同的连续子串 输入 一行一个字符串Q,表示对S的操作 如果第i个字母是小 ...

  5. BZOJ5137lg4081(广义后缀自动机,set启发式合并)

    BZOJ5137&&lg4081(广义后缀自动机,set启发式合并) 题面 自己找去 HINT 给定多个文本串,让你查询每个文本串中有多少个本质不同的子串且这个子串只出现在当前这个文本 ...

  6. BZOJ.3277.串(广义后缀自动机)

    题目链接 \(Description\) 给定n个串和K,求每个串中有多少个子串是这n个串中至少K个串的子串. \(Solution\) 同上题,我们可以算出每个节点所代表的串出现在了几个串中:而且我 ...

  7. BZOJ-3473 (广义后缀自动机:拓扑 or 启发式合并)

    BZOJ-3473 (广义后缀自动机:拓扑 or 启发式合并) 题目链接 题意 nnn个字符串,询问每个字符串一共有几个子串至少出现在nnn个字符串中的kkk个 思路: 拓扑 建广义后缀自动机, dp ...

  8. BZOJ-2780 Sevenk Love Oimaster(广义后缀自动机)

    BZOJ-2780 Sevenk Love Oimaster(广义后缀自动机) 题目链接 题意 给出n个字符串,询问m个串一共出现在几个字符串中. 题解 广义后缀自动机板子题 将n个串建在一起,每次插 ...

  9. 牛客多校4 - Count New String(序列自动机+广义后缀自动机)

    题目链接:点击查看 题目大意: 题目分析:首先观察到集集合 A 中那个套娃的表示,外层的范围是 [ x1 , y1 ] ,内层是 [ x2 , y2 ] ,而内层的定义域实际上是包含在外层的定义域内的 ...

最新文章

  1. ggsurvplot图片输出
  2. 辩论届人机大战:IBM新AI完胜人类冠军!
  3. Spring Cloud微服务笔记(一)微服务与云概念
  4. 5图片展示_做跨境电商想拍出爆款产品图片,我只用这五招
  5. 按键精灵调用迅雷下载文件
  6. C#使用SQLite数据库的代码示例
  7. matlab怎么打出角频率,[Matlab]频率f,角频率Ω和数字频率w的物理含义
  8. Adob Flash Professional CS6发布Android手机应用报异常
  9. perl脚本 linux,linux – 通过Perl脚本设置环境变量
  10. umijs多环境配置_项目实战-UmiJS开发(附带qiankun)
  11. rust修改礼包时间_Rust Async: futures-timer源码解析
  12. 区块链人才急聘:一大波高薪职位等你来
  13. 爱康科技压力大:前三季亏损1.2亿,中泰证券喊话全年净利3.92亿
  14. 小鸟云服务器linux版本的登陆
  15. 同步和异步Socket多线程编程基本模型介绍
  16. cfg80211 subsystem中的cfg80211_ops
  17. oracle事件的特点,ORACLE 深入解析10053事件(1)
  18. 单应性矩阵H和相机姿态参数R和T关系
  19. DNSPod十问梁定安: 工业互联网唤醒制造业的第二个春天
  20. access身份证号掩码_access中怎么设置掩码控制数字范围

热门文章

  1. pixel android8,谷歌Pixel 2更多信息:安卓8.1
  2. ios把数据传递到另一个页面_iOS 委托 页面之间传递数值
  3. android自动登录不过登陆界面,【教程】Android 记住密码和自动登录界面的实现
  4. java实现数字转mac,Java Ethernet.getSourceMAC方法代码示例
  5. dhcp服务器显示主机名,linux – 当我没有在dhclient.conf中定义一个时,我的DHCP服务器如何知道我的机器的主机名?...
  6. matlab编程数字信号,MATLAB--数字信号实验.doc
  7. python怎么样另存为_python要怎么保存python生成式
  8. php html asp .net iis tomcat,iis+apache+tomcat 整合共享80口 支持ASP .NET JSP PHP全能WEB服务...
  9. [mybatis]全局配置文件标签顺序
  10. C++ 实现无向图的最小生成树Prim算法(附完整代码)