题意:

给定串S,和若干个串T(i),
问有多少个S的本质不同的子串,在所有T(i)中没有出现过

数据范围:|S|<=1e5,,sum(|T|)<=1e5

解法:

将所有T串插入后缀自动机,计算出自动机中本质不同的串个数,记为cnt1,
然后将S串也插入后缀自动机,计算出自动机中本质不同的串个数,记为cnt2,
那么答案就是cnt2-cnt1,正确性显然。

多个串插入后缀自动机,插入这个串之前,将last置为根。

code:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxm=2e6+5;
char s[maxm];
char t[maxm];
int n,m;
struct SAM{int ch[maxm][26];int fa[maxm],l[maxm];//l[]是等价类的最长字符串长度lenint last=1,tot=1;//tot是节点数量void add(int c){int p=last,np=++tot;last=np;l[np]=l[p]+1;for(;p&&!ch[p][c];p=fa[p])ch[p][c]=np;if(!p)fa[np]=1;else{int q=ch[p][c];if(l[p]+1==l[q])fa[np]=q;else{int nq=++tot;l[nq]=l[p]+1;memcpy(ch[nq],ch[q],sizeof ch[q]);fa[nq]=fa[q];fa[q]=fa[np]=nq;for(;ch[p][c]==q;p=fa[p])ch[p][c]=nq;}}}void init(){for(int i=1;i<=tot;i++){memset(ch[i],0,sizeof ch[i]);fa[i]=l[i]=0;}last=tot=1;}ll cal(){ll ans=0;for(int i=2;i<=tot;i++){ans+=l[i]-l[fa[i]];}return ans;}
}S;
signed main(){int T;cin>>T;int cas=1;while(T--){S.init();scanf("%d",&n);scanf("%s",s+1);for(int i=1;i<=n;i++){scanf("%s",t+1);int len=strlen(t+1);for(int j=1;j<=len;j++){S.add(t[j]-'a');}S.last=1;}ll cnt1=S.cal();int len=strlen(s+1);for(int i=1;i<=len;i++){S.add(s[i]-'a');}ll cnt2=S.cal();printf("Case %d: ",cas++);cout<<cnt2-cnt1<<endl;}return 0;
}

hdu4416 Good Article Good sentence(多个串的本质不同的串个数,后缀自动机)相关推荐

  1. [hdu4416 Good Article Good sentence]后缀自动机SAM

    题意:给出串A和串集合B={B1,B2,...,Bn},求串A的所有不同子串中不是B中任一串的子串的数目. 思路:把A和B中所有字符串依次拼接在一起,然后构造后缀自动机,计算每个状态的R集合元素的最大 ...

  2. hdu4416 Good Article Good sentence (后缀数组)

    题意:问a串中有多少种字符串集合B中没有的连续子串. a的长度10^5,B中的总长度为不超过10^5. 解法:后缀数组题目:后缀数组能够非常easy算出来一个串中有多少种子串. 把a和B集合连起来.求 ...

  3. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

  4. HDU 4416 Good Article Good sentence(12年杭州 后缀数组)

    转载请注明出处,谢谢http://blog.csdn.net/acm_cxlove/article/details/7854526       by---cxlove 题目:给出一个A串,给出若干个B ...

  5. HDU 4416 Good Article Good sentence(后缀数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4416 题意:给出一个串A和多个串B.求A有多少不重复的子串使得这些子串不是B中任意一个串的子串? 思路 ...

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

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

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

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

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

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

  9. 2018.12.15 bzoj3676: [Apio2014]回文串(后缀自动机)

    传送门 对原串建立一个后缀自动机,然后用反串在上面匹配. 如果当前匹配的区间[l,r][l,r][l,r]包裹了当前状态的endposendposendpos中的最大值,那么[l,maxpos][l, ...

最新文章

  1. 一个Python小白5个小时爬虫经历
  2. 反弹和补遗:再论Bjarne Stroustrup的基于对象的含义
  3. xxx while the managed IDbConnection interface was being used: Login failed for user xxx
  4. 【Matlab】如何确定数组中存在哪几个数?
  5. 逻辑综合——施加约束
  6. jquery下 选择器整理
  7. 单独使用ckfinder选择图片
  8. scala代码示例_Scala注释示例
  9. python数值分为3种类型_Python数值类型
  10. SQL server置疑数据库修复
  11. 【软件工程】详细设计说明书
  12. [ajax] 基础 HTTP相关问题-GET-POST-XHR使用-jQuery中的ajax-跨域-同源-jsonp-cors
  13. Vim简介以及常用命令
  14. 22湖南大学866数据结构真题(回忆版)
  15. You are what you read 笔记
  16. 工作后的5种放松方法
  17. Android 双击退出和单击回到桌面
  18. 华为智慧屏SE55通过FTP远程文件管理-实简FTP v1.6.30
  19. Docker设置共享文件夹
  20. IOS微信浏览器返回事件popstate监听

热门文章

  1. 让 Windows XP 不用输入密码自动登录
  2. Python——输出大写英文字母
  3. 适用于实验室的新型能量回收污水处理铜板蚀刻机设计
  4. MySQL设计工厂管理数据库(Ⅰ)—表结构设计
  5. 使用 redis 中的 lzf 压缩算法
  6. 【读书笔记】《数学之美》——一个好方法在形式上总是简单的
  7. java syn包_月薪3K的后端面试点-网络与Java
  8. 总结机器学习优化器Optimizer
  9. 集群学习分享2:pcs+postgresql一主两从集群搭建
  10. html下拉框设置默认值_html下拉框怎么设置默认值