题目

传送门

Sol

就是广义\(sam\)
然后记录下每个状态属于哪些串,开\(set\)维护
\(parent\)树上启发式合并一下就好了

# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;IL int Input(){RG int x = 0, z = 1; RG char c = getchar();for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1;for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);return x * z;
}const int maxn(2e5 + 5);int trans[26][maxn], fa[maxn], len[maxn], size[maxn], last, tot = 1;
int l[maxn], r[maxn], n, q, t[maxn], id[maxn];
set <int> :: iterator it;
set <int> ed[maxn];
char s[maxn], qs[maxn << 1];IL void Extend(RG int c){RG int p = last, np = ++tot;len[last = np] = len[p] + 1;while(p && !trans[c][p]) trans[c][p] = np, p = fa[p];if(!p) fa[np] = 1;else{RG int q = trans[c][p];if(len[q] == len[p] + 1) fa[np] = q;else{RG int nq = ++tot;fa[nq] = fa[q], len[nq] = len[p] + 1;for(RG int i = 0; i < 26; ++i) trans[i][nq] = trans[i][q];fa[q] = fa[np] = nq;while(p && trans[c][p] == q) trans[c][p] = nq, p = fa[p];}}
}int main(){n = Input(), q = Input();for(RG int i = 1; i <= n; ++i){l[i] = r[i - 1];scanf(" %s", s + l[i]);r[i] = l[i] + strlen(s + l[i]), last = 1;for(RG int j = l[i]; j < r[i]; ++j) Extend(s[j] - 'a');}for(RG int i = 1; i <= tot; ++i) ++t[len[i]];for(RG int i = 1; i <= tot; ++i) t[i] += t[i - 1];for(RG int i = 1; i <= tot; ++i) id[t[len[i]]--] = i;for(RG int i = 1; i <= n; ++i)for(RG int j = l[i], nw = 1; j < r[i]; ++j){nw = trans[s[j] - 'a'][nw];ed[nw].insert(i);}for(RG int i = tot; i; --i){RG int p = id[i];size[p] = ed[p].size();if(size[p] > ed[fa[p]].size()) swap(ed[p], ed[fa[p]]);for(it = ed[p].begin(); it != ed[p].end(); ++it)ed[fa[p]].insert(*it);}for(RG int i = 1; i <= q; ++i){scanf(" %s", qs);RG int nw = 1, l = strlen(qs);for(RG int j = 0; j < l; ++j) nw = trans[qs[j] - 'a'][nw];printf("%d\n", size[nw]);}return 0;
}

转载于:https://www.cnblogs.com/cjoieryl/p/8940867.html

Bzoj2780: [Spoj]8093 Sevenk Love Oimaster相关推荐

  1. BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster( 后缀数组 + 二分 + RMQ + 树状数组 )

    全部串起来做SA, 在按字典序排序的后缀中, 包含每个询问串必定是1段连续的区间, 对每个询问串s二分+RMQ求出包含s的区间. 然后就是求区间的不同的数的个数(经典问题), sort queries ...

  2. 【BZOJ2780】【SPOJ】Sevenk Love Oimaster(广义后缀自动机)

    Description 有n个大串和m个询问,每次给出一个字符串s询问在多少个大串中出现过. Solution 广义后缀自动机入门题. 其实就是在插入一个串后将last设为root即可. 然后统计每个 ...

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

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

  4. SP8093 JZPGYZ - Sevenk Love Oimaster(广义SAM)

    SP8093 JZPGYZ - Sevenk Love Oimaster(广义SAM) 思路:广义 S A M SAM SAM构建文本串,然后用以一个 s z [ p ] sz[p] sz[p]表示状 ...

  5. BZOJ.2780.[SPOJ8093]Sevenk Love Oimaster(广义后缀自动机)

    题目链接 \(Description\) 给定n个模式串,多次询问一个串在多少个模式串中出现过.(字符集为26个小写字母) \(Solution\) 对每个询问串进行匹配最终会达到一个节点,我们需要得 ...

  6. linux环境变量的设置和查看方法,【Linux】Linux环境变量的设置和查看

    Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1 永久的:需要修改配置文件,变量永久生效. 2 临时的:使用export命令声明即可,变量在关闭shell时失效. 设置变量 ...

  7. 暑假集训 ---- 字符串2 (SAM专题)

    P1368 工艺 把串插入 S A M SAM SAM 插两次,然后贪心找最小字典序即可 [AHOI2013]差异 两个串的最长公共后缀就是后缀自动机上 lca 的长度 于是把两个串反过来,对于每一个 ...

  8. bzoj 2588 Spoj 10628. Count on a tree (可持久化线段树)

    Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MB Submit: 7669  Solved: 1894 [Sub ...

  9. SPOJ GSS3-Can you answer these queries III-分治+线段树区间合并

    Can you answer these queries III SPOJ - GSS3 这道题和洛谷的小白逛公园一样的题目. 传送门: 洛谷 P4513 小白逛公园-区间最大子段和-分治+线段树区间 ...

最新文章

  1. linux清屏命令clear和reset
  2. 每日一皮:键盘未找到的窘境...
  3. PHP各个组件或工具的安装与使用
  4. scipy笔记:scipy.sparse
  5. 实战SSM_O2O商铺_09【商铺注册】DTO之ShopExecution的实现
  6. 将活动工作表生成 PDF,并通过电子邮件发送
  7. 主成分分析PCA案例及原理
  8. 计算机考试题目czt,8级计算机组成原理本科期末试题a带答案(史岚).docx
  9. 关于exe应用程序做成Windows服务爬过的坑
  10. python中比较重要的几个函数_python几个重要的内置函数
  11. ipad横竖屏切换,页面适配方法
  12. azure微软文字转语音工具​AzureTools​使用
  13. 图形化开发(五)042-Three.js之Camera相机——正交相机和透视相机的对比
  14. 浅析大规模多语种通用神经机器翻译方法
  15. RBP as a streaming server(一)
  16. getline()详解
  17. 全球与中国环氧腻子棒市场现状及未来发展趋势
  18. linux inode使用率过高,解决inode占用过多
  19. 紫光展锐t610处理器相当于骁龙多少
  20. 检测固态硬盘性工具-AS SSD Benchmark提供下载

热门文章

  1. linux平台下防火墙iptables原理(转)
  2. iOS开发之绝对布局和相对布局(屏幕适配)
  3. java在继承中父类的成员变量是否会被子类所覆盖
  4. WebService客户端添加SOAPHeader信息
  5. 列表CheckBox全选 结合DataGrid 进行删除操作
  6. 【C++】动态内存管理/move/以及移动构造与移动赋值运算符
  7. MATLAB【十四】————调用深度库生成exe,批量运行三层文件夹下图片,保存结果
  8. PHP也玩并发,巧用curl 并发减少后端访问时间
  9. Asp.Net 使用 GDI+ 绘制3D饼图入门篇源码
  10. 深入理解malloc和free