Sevenk Love Oimaster bzoj-2780 Spoj-8093

题目大意:给定$n$个大串和$m$次询问,每次给出一个字符串$s$询问在多少个大串中出现过。

注释:$1\le n\le 10^4$,$1\le q\le 6\cdot 10^4$,$the\ total\ length\ of\ n\ strings\ \le 10^5$,

$the\ total\ length\ of\ q\ question\ strings\le 3.6\times 10^5$。


想法:广义后缀自动机

先对$n$个串建立广义后缀自动机。

后缀自动机上每个节点记录下在多少个串串里出现过,记为$cnt_i$。

然后对于每个询问串,沿着$trans$指针走到当前的$now$节点,输出$cnt_{now}$即可。

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#define N 200010
using namespace std;
int n,m,last=1,tot=1,tr[N][26],fa[N],len[N],cnt[N],vis[N];
string s[N],ss;
void update(int c)
{
int v=last,u=++tot;
last=u;
len[u]=len[v]+1;
while(v&&!tr[v][c]) tr[v][c]=u,v=fa[v];
if(!v) fa[u]=1;
else
{
int x=tr[v][c];
if(len[x]==len[v]+1) fa[u]=x;
else
{
int y=++tot;
memcpy(tr[y],tr[x],sizeof tr[y]);
fa[y]=fa[x]; fa[x]=fa[u]=y;
len[y]=len[v]+1;
while(v&&tr[v][c]==x) tr[v][c]=y,v=fa[v];
}
}
}
int main()
{
ios::sync_with_stdio(false);
int n,m;
cin >> n >> m ;
for(int i=1;i<=n;i++)
{
cin >> s[i] ;
int l=s[i].length();
last=1;
for(int j=0;j<l;j++) update(s[i][j]-'a');
}
for(int i=1;i<=n;i++)
{
int l=s[i].length(),now=1;
for(int j=0;j<l;j++)
{
now=tr[now][s[i][j]-'a'];
int t=now;
while(t&&vis[t]!=i)
{
cnt[t]++;
vis[t]=i;
t=fa[t];
}
}
}
for(int i=1;i<=m;i++)
{
cin >> ss ;
int l=ss.length(),now=1;
for(int j=0;j<l;j++) now=tr[now][ss[j]-'a'];
printf("%d\n",cnt[now]);
}
return 0;
}

小结:对后缀自动机的理解好浅啊...

[bzoj2780][Spoj8093]Sevenk Love Oimaster_广义后缀自动机的更多相关文章

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

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

  2. SP8093 JZPGYZ - Sevenk Love Oimaster(广义后缀自动机)

    题意 题目链接 Sol 广义后缀自动机板子题..和BZOJ串那个题很像 首先建出询问串的SAM,然后统计一下每个节点被多少个串包含 最后直接拿询问串上去跑就行了 #include<bits/st ...

  3. bzoj 3277 串 && bzoj 3473 字符串 && bzoj 2780 [Spoj]8093 Sevenk Love Oimaster——广义后缀自动机

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3277 https://www.lydsy.com/JudgeOnline/problem.p ...

  4. BZOJ 2780 [Spoj]8093 Sevenk Love Oimaster ——广义后缀自动机

    给定n个串m个询问,问每个串在n个串多少个串中出现了. 构建广义后缀自动机,(就是把所有字符串的后缀自动机合并起来)其实只需要add的时候注意一下就可以了. 然后对于每一个串,跑一边匹配,到达了now ...

  5. BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster [广义后缀自动机]

    JZPGYZ - Sevenk Love Oimaster     Oimaster and sevenk love each other.       But recently,sevenk hea ...

  6. 【BZOJ2780】[Spoj]8093 Sevenk Love Oimaster 广义后缀自动机

    [BZOJ2780][Spoj]8093 Sevenk Love Oimaster Description Oimaster and sevenk love each other.     But r ...

  7. BZOJ2780:[SPOJ8093]Sevenk Love Oimaster(广义SAM)

    Description Oimaster and sevenk love each other. But recently,sevenk heard that a girl named ChuYuXu ...

  8. BZOJ2780 [Spoj]8093 Sevenk Love Oimaster 【广义后缀自动机】

    题目 Oimaster and sevenk love each other. But recently,sevenk heard that a girl named ChuYuXun was dat ...

  9. 【BZOJ2780】Sevenk Love Oimaster【广义后缀自动机】

    题意 给出你n个字符串和q个查询,每个查询给出一个字符串s,对于每个查询你都要输出这个字符串s在上面多少个字符串中出现过. 分析 广义后缀自动机的裸题.建好SAM以后再跑一遍得到每个状态的ocu和la ...

随机推荐

  1. TCAM 与CAM

    CAM是Content Addressable Memory的缩写,即"内容寻址存储器"的意思,它是在传统的存储技术的基础上实现的联想记忆存储器,关于CAM的基本操作有三种: 1) ...

  2. 开启apahce的mod_speling.so模块,让使用apahce http服务器不再有大小写烦恼

    今天把服务器重新安装系统,做apache调优前,优化下apache对网络地址大小写不区分的支持.记录如下: 编译mod_speling.so模块去除Apache-url大小写字母敏感的配置 1. 进入 ...

  3. 【转载】Hierarchal Temporal Memory (HTM)

    最近在看机器学习,看能否根据已有的历史来预测Hardware的故障发生概率.下文是一篇很有意思的文章,转自 http://numenta.org/htm.html. NuPIC是一个开源项目,用来实现 ...

  4. 职业生涯手记——记人生中第一次经历的产品上线——内测篇Day11

    2017/08/21 产品内测期Day11 说出来可能你不信,原定于9月15号结束的内测活动,今天居然被甲方投诉导致强制停止,原因是这个内测活动没有经过批准,并且有用户打了甲方所在公司的客服部门,增加 ...

  5. 迅为iMX6UL Cortex-A7架构单核ARM开发板接口介绍-支持定制

    支持商业级和工业级核心板 1. POWER 电源接口电源输入为 5V/2A+,给核心板提供 5V 电源,给底板供电.原理图部分如下图所示. 电源接口位置如下图所示. 2. SWITCH 电源开关轻触电 ...

  6. ssh 非root用户互信

    之所以要把这个记录下来 是因为它的确和root用户不一样root用户 不需要改动什么权限问题  只要生成私钥/公钥对 即可 但是一样的操作在普通用户上就出了问题了 折腾了老半天 ssh-keygen ...

  7. 【整理】用JSON-server模拟REST API

    用JSON-server模拟REST API https://www.cnblogs.com/ys-wuhan/p/6387791.html

  8. WebGL 绘制Line的bug(三)

    之前铺垫了许多,今天可以来分享点纯干货了. 上一篇已经讲述了通过面模拟线条时候,每一个顶点的顶点数据包括:端点坐标.偏移量.前一个端点坐标.后一个端点坐标,当然如果我们通过索引的方式来绘制的话,还包括 ...

  9. canvas使用自定义字体没有效果

    字体样式没有显示主要是因为字体还没有加载完成~ css @font-face { font-family: myFont; src: local('sen.ttf'), url("sen.t ...

  10. 拖拽功能-jquery

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...