AC自动机+树状数组

  先建出fail树,对于查询x在y中出现几次,就等于在x为根的子树下有多少个节点为单词y在tire树路径上所在的节点,可用dfs+树状数组离线求出答案。

#include<cstdio>
#include<cstring>
#include<queue>
#include<set>
#include<vector>
#define pb push_back
#define mp make_pair
#define fi first
#define sc second
#define N 1000010
using namespace std;
char s[N];
int tmp,len,i,fa[N],cnt,p[N],tot,fail[N],c,a,b,ans[N];
int C[N];
int f[N][27],ss,L[N],R[N],m;
int dp,pre[N],tt[N],query[N];
queue<int> q;
vector<pair<int,int> > vec[N];
int lowbit(int x)
{return x&(-x);
}
void cc(int x,int w)
{while (x<=ss){C[x]+=w;x+=lowbit(x);}
}
int sum(int x)
{int ans=0;while (x>0){ans+=C[x];x-=lowbit(x);}return ans;
}
void link(int x,int y)
{dp++;pre[dp]=p[x];p[x]=dp;tt[dp]=y;
}
void dfs(int x)
{int i=p[x];ss++;L[x]=ss;while (i){dfs(tt[i]);i=pre[i];}R[x]=ss;
}
void solve()
{int i,tmp=0,cnt=0,j;for (i=0;i<len;i++)if (s[i]=='B'){cc(L[tmp],-1);tmp=fa[tmp];}elseif (s[i]=='P'){cnt++;for (j=0;j<vec[cnt].size();j++){int o=query[vec[cnt][j].fi];ans[vec[cnt][j].sc]=sum(R[o])-sum(L[o]-1);}}else{tmp=f[tmp][s[i]-97];cc(L[tmp],1);}
}
int main()
{scanf("%s",s);len=strlen(s);tmp=0;for (i=0;i<len;i++)if (s[i]=='B')tmp=fa[tmp];elseif (s[i]=='P'){cnt++;query[cnt]=tmp;}else{if (f[tmp][s[i]-97]==0){f[tmp][s[i]-97]=++tot;fa[tot]=tmp;}tmp=f[tmp][s[i]-97];}for (i=0;i<26;i++)if (f[0][i]){fail[f[0][i]]=0;q.push(f[0][i]);}while (!q.empty()){c=q.front();q.pop();for (i=0;i<26;i++)if (f[c][i]==0)f[c][i]=f[fail[c]][i];else{fail[f[c][i]]=f[fail[c]][i];q.push(f[c][i]);}}for (i=1;i<=tot;i++)link(fail[i],i);dfs(0);scanf("%d",&m);for (i=1;i<=m;i++){scanf("%d%d",&a,&b);vec[b].pb(mp(a,i));}solve(); for (i=1;i<=m;i++)printf("%d\n",ans[i]);
}

  

转载于:https://www.cnblogs.com/fzmh/p/5288393.html

BZOJ2434 [Noi2011]阿狸的打字机相关推荐

  1. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

  2. [bzoj 2434][Noi2011]阿狸的打字机

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2434 [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory ...

  3. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2545  Solved: 1419 [Submit][S ...

  4. 2434: [Noi2011]阿狸的打字机

    2434: [Noi2011]阿狸的打字机 https://lydsy.com/JudgeOnline/problem.php?id=2434 分析: AC自动机. 查询x在y中出现了几次,就是查询y ...

  5. 【bzoj 2434】【codevs 1946】[Noi2011]阿狸的打字机(AC自动机)

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2477  Solved: 1382 [Submit][S ...

  6. bzoj 2434 [Noi2011]阿狸的打字机(AC自动机+fail树+dfs序+树状数组)

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 3521  Solved: 1913 [Submit][S ...

  7. [NOI2011] 阿狸的打字机

    [NOI2011] 阿狸的打字机 题目描述 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有 28 28 28 个按键,分别印有 26 26 26 个小写英文字母和 B.P 两 ...

  8. P2414 NOI2011阿狸的打字机 [AC自动机,dfs序]

    阿狸的打字机 题解 题目中给出的字符串就是构建TrieTrieTrie树的顺序.我们将字符串依次读入,每读入一个小写字符就相当于在TrieTrieTrie树当前节点下插入一个小写字符,读入BBB时,就 ...

  9. 【bzoj2434】[Noi2011]阿狸的打字机 AC自动机+Dfs序+树状数组

    题目描述 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的: l 输入小 ...

最新文章

  1. 同步和串行的区别_[深度思考]·为什么CNN是同步(并行)而RNN是异步(串行)的呢?...
  2. 当交易所开始“革命”,整个行业将“为之一颤”
  3. 文本域字数限制统计(不区分中英文 符号)
  4. Git的使用_思维导图
  5. Linux开机自动启动软件/可执行程序方法
  6. Rails运行时sqlite3报错问题的解决
  7. Fragment 和 FragmentActivity的使用(二)
  8. Latex中使用BibTex插入参考文献
  9. segnet---训练
  10. Appium自动化框架从0到1之 测试用例封装
  11. 二叉树遍历 递归/非递归/morris
  12. lt路由器的虚拟服务器如何使用,路由器设置局域网内服务器
  13. UE5 使用MetaHuman 制作数字人
  14. 顺丰速运和顺丰快递_携手快递外卖小哥,石浦交警送上“安全大礼包”
  15. 【C++】1014 福尔摩斯的约会
  16. 安卓使用javascriptApi快速开发高德地图
  17. php+仿微信发红包+负数,php仿微信红包分配算法的实现方法
  18. 解决开放平台的证书错误:ValidatorException:PKIX path validation failed
  19. 1.简述计算机控制系统的概念,自考机电一体化技术及应用 2
  20. 韩语学习之——韩语基础入门第三课复合元音

热门文章

  1. 《LeetCode力扣练习》第5题 C语言版 (做出来就行,别问我效率。。。。)
  2. c#的chart标题_C#中CHART画图
  3. 鸿蒙应用开发在线体验官网,华为鸿蒙 HarmonyOS 应用开发在线体验网站上线
  4. php 获取对象中的元素个数组长度,php数组长度怎么获取
  5. signature=a8a3e788013f73439051c7287d7f5f0b,来用百度密语吧!!!
  6. 计算机在线作业题,中医大计算机在线作业及答案-20210412090026.docx-原创力文档
  7. maya怎么保持2u_【肘进健康】手肘超伸怎么练?
  8. 模板匹配—归一化相关系数匹配算法
  9. 以太坊白皮书_区块链60讲第33集~什么是以太坊?
  10. SFB 项目经验-51-某上市企业2千人Exchange 2013升级2016高可用之伤01