博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ3172】 [Tjoi2013]单词
阅读量:4322 次
发布时间:2019-06-06

本文共 1951 字,大约阅读时间需要 6 分钟。

【题意】

      某人读论文,一篇论文是由许多单词组成。但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次。

 

【分析】

      个人觉得是用了反fail树的思想,Ans[i]=t[i].cnt+∑Ans[反fail]...不过因为有些节点的反fail会有很多个,存起来不方便。但是AC自动机的fail却只有一个,而且我们在建立AC自动机的时候是用类似宽搜的方法建的,所以保存在队列里的节点肯定是由深到浅。然后我们就可以从后往前for一遍,把i的cnt加入到i的fail的cnt里,最后每个单词最末节点的cnt就是答案。

 

代码如下:

1 #include
2 #include
3 #include
4 5 const int Maxn=(int)1e4; 6 const int Maxl=200; 7 8 struct node 9 {10 int son[27],fail,cnt,ans;11 }t[16035707];12 13 int n,m,cnt=0;14 int q[Maxn*Maxl+10],bj[Maxn];15 char s[Maxl];16 17 void floy()18 {19 int i;20 for(i=1;i<=Maxn;i++) t[i].fail=0,t[i].ans=0;21 }22 23 void read() 24 {25 memset(bj,0,sizeof(bj));26 int i,j,x,ind;27 scanf("%d",&n);28 getchar();29 for(i=1;i<=n;i++)30 {31 scanf("%s",s+1);32 m=strlen(s+1);33 x=0;34 for(j=1;j<=m;j++)35 {36 ind=s[j]-'a'+1;37 if(!t[x].son[ind]) t[x].son[ind]=++cnt;38 x=t[x].son[ind];39 t[x].cnt++;40 if(j==m) bj[i]=cnt;41 }42 }43 }44 45 void Build_AC()46 {47 int i,x,y,j;48 q[0]=0;49 q[++q[0]]=0;50 //for(i=1;i<=26;i++) if(t[0].son[i]) q[++q[0]]=t[0].son[i]; 51 for(i=1;i<=q[0];i++)52 {53 x=q[i];54 y=t[x].fail;55 for(j=1;j<=26;j++)56 if(t[x].son[j]) 57 { 58 //t[t[x].son[j]].fail=t[y].son[j];59 t[t[x].son[j]].fail=x?t[y].son[j]:x; 60 q[++q[0]]=t[x].son[j]; 61 }62 else t[x].son[j]=t[y].son[j];63 }64 for(i=q[0];i>=1;i--)65 {66 t[t[q[i]].fail].cnt+=t[q[i]].cnt;67 }68 }69 70 int main()71 {72 read();73 Build_AC();74 for(int i=1;i<=n;i++) printf("%d\n",t[bj[i]].cnt);75 }
[BZOJ3172]

 

2016-07-12 10:12:39

转载于:https://www.cnblogs.com/Konjakmoyu/p/5662552.html

你可能感兴趣的文章
ubuntu server 10.04 apache2配置多个虚拟主机
查看>>
python标准库xml.etree.ElementTree的bug
查看>>
Tomcat服务器介绍和使用
查看>>
IOS网络方面(异步请求)
查看>>
day6 python学习
查看>>
事务分类
查看>>
《程序是怎样跑起来的》第四章读后感
查看>>
遍历datatable的几种方法(C# )
查看>>
Oracle记录(三) Scott用户的表结构
查看>>
centos静默式安装Oracle11g
查看>>
软件评测师下午题笔记
查看>>
性能测试的概念
查看>>
JavaScript中的函数上下文和apply,call
查看>>
中文排序
查看>>
少数股东损益
查看>>
SecureCRT的安装
查看>>
POJ2635-The Embarrassed Cryptographer
查看>>
css中font-family的中文字体
查看>>
学习笔记:CentOS 7学习之十二:查找命令
查看>>
delphi回调函数
查看>>