好难啊,这个题需要很强的技巧和码力

首先ac自动机不难想到,暴力跳fail也不难想到,但建fail树没想到

建好之后问题就变成了随着点的加入,求一个子树里1的个数

然后由于询问一定在一个子树里,而加点的时候合法的一定在内部(dfs序内部),所以差分即可求一段中1的和,可用树状数组加速

码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
#define N 200010
int sz=1,T=1,len,t[N],i,x,y,l[N],r[N],ch[N][27],ans[N],ci[N],fu[N],sp[N],m;
char str[N];
queue<int>q;
vector<int>v[100005],wen[100005],id[100005];
int lowbit(int a)
{return a&(-a);
}void add(int x,int y)
{   int i;for(i=x;i<=T;i+=lowbit(i)){t[i]+=y;}
}
int qiu(int x)
{int ans=0,i;for(i=x;i>0;i-=lowbit(i)){ans+=t[i];}  return ans;
}
void jia()
{int i,o=1,lin=0;
for(i=0;i<len;i++)
if(str[i]=='P')ci[++lin]=o;else
if(str[i]=='B')o=fu[o];else
{if(ch[o][str[i]-'a'+1]==0)ch[o][str[i]-'a'+1]=++sz,fu[sz]=o;o=ch[o][str[i]-'a'+1];
}
}
void shipei()
{int i;q.push(1);while(!q.empty()){int st=q.front();q.pop();for(i=1;i<=26;i++){if(ch[st][i]==0)continue;int k=sp[st];while(ch[k][i]==0)k=sp[k];sp[ch[st][i]]=ch[k][i];q.push(ch[st][i]);}}
}
void dfs(int o)
{l[o]=++T;for(int i=0;i<v[o].size();i++)dfs(v[o][i]);r[o]=++T;
}
void work()
{int o=1,dc=0;add(l[1],1);for(int j=0;j<len;j++)if(str[j]=='P'){++dc;for(i=0;i<wen[dc].size();i++){int x=ci[wen[dc][i]];ans[id[dc][i]]=qiu(r[x])-qiu(l[x]-1);}}else if(str[j]=='B')add(l[o],-1),o=fu[o];else{o=ch[o][str[j]-'a'+1];add(l[o],1);}
}
int main()
{for(i=1;i<=26;i++)ch[0][i]=1;     scanf("%s",str);   len=strlen(str);jia();shipei();for(i=1;i<=sz;i++)v[sp[i]].push_back(i);scanf("%d",&m);for(i=1;i<=m;i++){scanf("%d%d",&x,&y);wen[y].push_back(x);id[y].push_back(i);}dfs(1);work();   for(i=1;i<=m;i++)printf("%d\n",ans[i]);
} 

2017.8.15 阿狸的打字机 失败总结相关推荐

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

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

  2. Visual Studio 2017 版本 15.5.5

    Visual Studio 2017 版本 15.5.5 已修复的问题 (1)Xamarin 应用会引发"Cannot access a disposed object. Object na ...

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

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

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

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

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

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

  6. Productivity Power Tools,对于Visual Studio 2017的15个扩展

    在Visual Studio 2017正式发布期间,微软公司更新并发布了Productivity Power Tools的扩展版本.Productivity Power Tools的这个版本包括了针对 ...

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

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

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

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

  9. Visual Studio 2017版本15.9现在可用

    本文转自 Visual Studio 2017 version 15.9 now available - Visual Studio Blog 本文章为机器翻译. 该文章的最新版本已迁移至个人博客[比 ...

最新文章

  1. 磁珠 磁环 双向二极管 TVS二极管
  2. Java的新项目学成在线笔记-day8(三)
  3. storm在运行过程中会自动调整拓扑吗_干粉灭火器灌装机的操作你知道吗?
  4. IEEE R10 SAC Special Call for Proposals
  5. cogs 76. [NOIP2007] 统计数字
  6. 稳站大屏 AIoT 时代之巅,创维 Swaiot 生态品牌实现全面布局!
  7. python学习——和python的第一次亲密接触
  8. 5、传输介质——大对数线缆
  9. win7打开xp共享的计算机,高手教你如何让XP与Win7系统局域网共享
  10. 使用计算机过程中 你有哪些有效措施防范计算机病毒,计算机病毒防范措施主要有什么...
  11. 荣誉勋章出现计算机中丢失,荣誉勋章战士无法运行的原因及解决方法
  12. Python+Excel:批量重命名多个工作簿
  13. 淘宝/天猫获得淘宝app商品详情原数据 API
  14. Mac安装brew及使用
  15. 5G/NR 上行免授权
  16. Wireshark对ping报文的解码显示(BE与LE) 转自作者:易隐者
  17. 电视机顶盒视频播放插件
  18. 第一台电子计算机设计,第一台由美国宾夕法尼亚大学设计和研究出来的电子计算机始于()。 - 问答库...
  19. 产品研发的体系构建与研发过程管理第一讲
  20. data dictionary(数据字典)

热门文章

  1. 设计模式笔记十六:解释器模式
  2. 路径-真机和虚拟机共享
  3. 吴恩达 深度学习 编程作业(1-2.1)- Python Basics with Numpy
  4. 如何快速python入手_初学者怎么才能快速学会Python?
  5. Atom Latex Settings
  6. orabbix监控oracle11g,zabbix利用orabbix监控oracle(详细配置图解)
  7. 光电编码器的原理及应用场合_旋转式光电编码器工作原理及在视觉检测中的使用...
  8. linux命令怎么查看文件时间排序,linux中ls命令按照文件大小排...-ls命令按大小与时间排序文件...-ls按时间排序输出文件列表的实例分析_169IT.COM...
  9. java月实训小结800字_Java实训小结
  10. java 字符串为空_java判断字符串为空,方法详解