bzoj2434
利用了bzoj3172提到的性质,x串在y串中的出现的次数即为在fail树上以x结尾节点为根的子树中有多少个节点在y串上
所以很明显我们要离线解决,我们先把询问按y分类存起来
然后我们顺着操作顺序来,出现一个字符就把fail树上对应节点标为1,删除之后就改为0;
当一个串输出之后,我们就统计跟他有关的询问(查询x串结尾节点子树和)
这种问题显然用dfs序+树状数组解决
const maxn=;
type node=record
y,next:longint;
end; var i,j,n,m,len,tot,all,k,ll,rr,num,x,y,p:longint;
t:array[..maxn,'a'..'z'] of longint;
q,pre,f,v,l,d,h,r,h2,ans,st,sum:array[..maxn] of longint;
g,g2:array[..maxn] of node;
c:char;
s:array[..maxn] of char; procedure add(x,y:longint);
begin
inc(num);
g[num].y:=y;
g[num].next:=h[x];
h[x]:=num;
end; procedure ac;
begin
fillchar(q,sizeof(q),);
ll:=;
rr:=;
for c:='a' to 'z' do
if t[,c]> then
begin
add(,t[,c]);
inc(rr);
q[rr]:=t[,c];
end;
while ll<>rr do
begin
inc(ll);
i:=q[ll];
for c:='a' to 'z' do
if t[i,c]> then
begin
k:=t[i,c];
inc(rr);
q[rr]:=k;
j:=f[i];
while (j>) and (t[j,c]=) do j:=f[j];
f[k]:=t[j,c];
add(t[j,c],k);
end;
end;
end; procedure dfs(x:longint);
var p:longint;
begin
inc(tot);
l[x]:=tot;
p:=h[x];
while p<> do
begin
dfs(g[p].y);
p:=g[p].next;
end;
r[x]:=tot;
end; procedure ins(x,y:longint);
begin
g2[i].y:=y;
g2[i].next:=h2[x];
h2[x]:=i;
end; procedure change(x,y:longint);
begin
while x<=tot do
begin
inc(sum[x],y);
inc(x,x and -x);
end;
end; function get(x:longint):longint;
begin
get:=;
while x> do
begin
inc(get,sum[x]);
dec(x,x and -x);
end;
end; procedure main;
begin
readln(n);
for i:= to n do
begin
readln(x,y);
ins(y,x);
end;
j:=;k:=;m:=;
for i:= to len do
begin
case s[i] of
'B':begin change(l[st[k]],-);dec(k);j:=pre[j];end;
'P':
begin
inc(m);p:=h2[m];
while p<> do
begin
ans[p]:=get(r[d[g2[p].y]])-get(l[d[g2[p].y]]-);
p:=g2[p].next;
end;
end;
else begin
j:=t[j,s[i]];
inc(k);st[k]:=j;
change(l[j],);
end;
end;
end;
for i:= to n do writeln(ans[i]);
end; begin
j:=;
while not eoln do
begin
inc(len);
read(s[len]);
case s[len] of
'B':begin j:=pre[j];end;
'P':begin inc(tot);d[tot]:=j;v[j]:=;end;
else begin
if t[j,s[len]]= then
begin
inc(all);
t[j,s[len]]:=all;
pre[all]:=j;
end;
j:=t[j,s[len]];
end;
end;
end;
readln;
ac;
tot:=;
dfs();
main;
end.
bzoj2434的更多相关文章
- 【BZOJ2434】阿狸的打字机(AC自动机,树状数组)
[BZOJ2434]阿狸的打字机(AC自动机,树状数组) 先写个暴力: 每次打印出字符串后,就插入到\(Trie\)树中 搞完后直接搭\(AC\)自动机 看一看匹配是怎么样的: 每次沿着\(AC\)自 ...
- 【BZOJ2434】【NOI2011】阿狸的打字机(AC自动机,树状数组)
[BZOJ2434]阿狸的打字机(AC自动机,树状数组) 先写个暴力: 每次打印出字符串后,就插入到\(Trie\)树中 搞完后直接搭\(AC\)自动机 看一看匹配是怎么样的: 每次沿着\(AC\)自 ...
- 【bzoj2434】 Noi2011—阿狸的打字机
http://www.lydsy.com/JudgeOnline/problem.php?id=2434 (题目链接) 题意 给出一个字符串,$P$表示输出,$B$表示退格.$m$组询问$(x,y)$ ...
- 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组
[BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...
- 【bzoj2434】: [Noi2011]阿狸的打字机 字符串-AC自动机-BIT
[bzoj2434]: [Noi2011]阿狸的打字机 x串在y串上的匹配次数就是y在自动机所有节点上能够通过fail走到x最后一个节点的个数 (就是y串任意一个前缀的后缀能匹配到x的个数)和[bzo ...
- 【BZOJ2434】阿狸的打字机(fail树,DFS序)
题意: 1<=N<=10^5 1<=M<=10^5 输入总长<=10^5 思路: From http://blog.csdn.net/lych_cys/article ...
- Bzoj2434 [Noi2011]阿狸的打字机
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2536 Solved: 1415 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到 ...
- BZOJ2434 [Noi2011]阿狸的打字机(AC自动机 + fail树 + DFS序 + 线段树)
题目这么说的: 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母.经阿狸研究发现,这个打字机是这样工作的: 输入小 ...
- 【BZOJ-2434】阿狸的打字机 AC自动机 + Fail树 + DFS序 + 树状数组
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2022 Solved: 1158[Submit][Sta ...
随机推荐
- 利用Highcharts制作web图表学习(二)
最近中海油的项目需要用到图表展示数据,最近还是一直边学习边开发,今天做了一个展示,炼化厂加热炉效率展示的柱状图,把代码贴出来,大家指点一下互相学习,我是通过数组给Highcharts绑定的值, ...
- WordLight: highlights all occurrences of a selected text for VS2008
https://visualstudiogallery.msdn.microsoft.com/ad686131-47d4-4c13-ada2-5b1a9019fb6f About This is a ...
- 在js中window.open通过“post”传递参数
在js中window.open通过“post”传递参数的步骤如下: 如:在A.jsp中 有一个js方法 winow.open,目标地址是 xx.do 1.在A.jsp建一个form,把要设置的值通过j ...
- HDU 1175 连连看(BFS)
连连看 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- What are TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR (etc.)?
转自: http://www.codeproject.com/Articles/76252/What-are-TCHAR-WCHAR-LPSTR-LPWSTR-LPCTSTR-etc 解释的超详细!! ...
- datatables完整的增删改查
1.需要指定datatables的ID <button class="btn btn-primary" id="newAttribute">新增证照 ...
- HTML 表格的书写方式:
首先要进行reset table{border-collapse:collapse;border-spacing:0;}th{text-align:inherit;} 1. caption标签对整个 ...
- 如何在windows上安装部署设置SVN服务器
1 一.准备工作 1.SVN服务器:解压缩包,可以从官方网站下载最新版本. 2.SVN客户端:TortoiseSVN,即常说的小乌龟,是一个客户端程序,用来与服务器端通讯. 2 二.安装服务器和客 ...
- 安装mysql-python需要碰到错误:Unable to find vcvarsall.bat 的解决方法
1.发现从https://pypi.python.org/pypi/MySQL-python/1.2.5#downloads 下载下来的python版本是2.7
- uublog在线测试demo
http://demo.uublog.me/ 后台 http://demo.uublog.me/admin/ 用户名/密码:admin/admin