洛谷P3796
题意:有n个由小写字母组成的模式串以及一个文本串T。每个模式串可能会在文本串中出现多次。哪些模式串在文本串T中出现的次数最多。
题解:ac自动机模板加强版,开一个数组单独记录各个字符串出现的次数,找出最多的即可。(数组一定要初始化!!不然会mle!血的教训,找了半天原因,结果是初始化放进函数忘记调用了_'')
1 #include<bits/stdc++.h>
2 using namespace std;
3
4 const int maxn=3e5+10;
5 string s[maxn];
6 int num[maxn],ch[maxn][26],fail[maxn],ans[maxn];
7 int sum,n,tot;
8
9 void init()
10 {
11 memset(num,0,sizeof(num));
12 memset(ch,0,sizeof(ch));
13 memset(fail,0,sizeof(fail));
14 memset(ans,0,sizeof(ans));
15 tot=0;
16 }
17
18 void insert(string a,int v){
19 int now=0;
20 for(int i=0;i<a.size();i++){
21 int x=a[i]-'a';
22 if(!ch[now][x]) ch[now][x]=++tot;
23 now=ch[now][x];
24 }
25 num[now]=v;
26 }
27
28 void getfail(){
29 queue<int>q;
30 for(int i=0;i<26;i++){
31 if(ch[0][i]){
32 q.push(ch[0][i]);
33 fail[ch[0][i]]=0;
34 }
35 }
36 while(!q.empty()){
37 int u=q.front();q.pop();
38 for(int i=0;i<26;i++){
39 int v=ch[u][i];
40 if(!v) ch[u][i]=ch[fail[u]][i];
41 else {
42 fail[v]=ch[fail[u]][i];
43 q.push(v);
44 }
45 }
46 }
47 }
48
49 void query(string a){
50 int now=0;
51 for(int i=0;i<a.size();i++){
52 int p=a[i]-'a';
53 now=ch[now][p];
54 for(int j=now;j;j=fail[j])
55 ans[num[j]]++;
56 }
57 }
58
59 int main()
60 {
61 while(cin>>n&&n){
62 init(); //一定初始化!!
63 for(int i=1;i<=n;i++){
64 cin>>s[i];
65 insert(s[i],i);
66 }
67 getfail();
68 string k;
69 cin>>k;
70 query(k);
71 sum=0;
72 for(int i=1;i<=n;i++)
73 if(ans[i]>sum) sum=ans[i];
74 cout<<sum<<endl;
75 for(int i=1;i<=n;i++)
76 if(ans[i]==sum) cout<<s[i]<<endl;
77 }
78 return 0;
79 }
洛谷P3796的更多相关文章
- 洛谷P3796 【模板】AC自动机(加强版)(AC自动机)
洛谷题目传送门 先膜一发yyb巨佬 orz 想学ac自动机的话,推荐一下yyb巨佬的博客,本蒟蒻也是从那里开始学的. 思路分析 裸的AC自动机,这里就不讲了.主要是这题太卡时了,尽管时限放的很大了.. ...
- 洛谷 P3808 【模板】AC自动机(简单版)洛谷 P3796 【模板】AC自动机(加强版)
https://www.cnblogs.com/gtarcoder/p/4820560.html 每个节点的后缀指针fail指针指向: 例如he,she,his,hers的例子(见蓝书P214): 7 ...
- 洛谷 P3796 【模板】AC自动机(加强版)(AC自动机)
题目链接:https://www.luogu.com.cn/problem/P3796 AC自动机:复杂度$O( (N+M)\times L )$,N为模式串个数,L为平均长度,M为文章长度. ins ...
- 洛谷P3796 - 【模板】AC自动机(加强版)
原题链接 Description 模板题啦~ Code //[模板]AC自动机(加强版) #include <cstdio> #include <cstring> int co ...
- cjoj P1435 - 【模板题 USACO】AC自动机 && 洛谷 P3796 【模板】AC自动机(加强版)
又打了一遍AC自动稽. 海星. 好像是第一次打trie图,很久以前就听闻这个思想了.OrzYYB~ // It is made by XZZ #include<cstdio> #inclu ...
- 【刷题】洛谷 P3796 【模板】AC自动机(加强版)
题目描述 有 \(N\) 个由小写字母组成的模式串以及一个文本串 \(T\) .每个模式串可能会在文本串中出现多次.你需要找出哪些模式串在文本串 \(T\) 中出现的次数最多. 输入输出格式 输入格式 ...
- 【AC自动机】洛谷三道模板题
[题目链接] https://www.luogu.org/problem/P3808 [题意] 给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过. [题解] 不再介绍基础知识了,就是裸的模 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
随机推荐
- 【JDBC核心】获取数据库连接
获取数据库连接 要素一:Driver 接口实现类 Driver 接口: java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口.这个接口是提供给数据库厂商使用的,不同数据库厂商提 ...
- 安装蓝鲸paas社区版
安装蓝鲸paas社区版http://docs.bk.tencent.com/bkce_install_guide/setup/get_ready.html#hostssystemctl stop fi ...
- JavaScript入门-对象
js对象 本篇主要介绍js里如何创建对象,以及for循环访问对象的成员... 什么是对象? 对象,并不是中文里有男女朋友意思,它是从英文里翻译来的,英文叫[Object],目标,物体,物品的意思. 在 ...
- 【IMPDP】ORA-31655
出现ora-31655错误的情况是因为不是同一个schema,导致的问题产生 解决的方法; 在导入语句最后添加上remap_schema=old:new 着old是原schema,也就是导出的用户名, ...
- 奇技淫巧,还是正统功夫? - Python推导式最全用法
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...
- Eclipse中的可视化图形界面设计插件windowbuilder
对于eclipse平台上的可视化开发工具插件,有windowbuilder.visual editor等,今天就对windowbuilder说明: WindowBuilder功能特性等介绍,参考如下网 ...
- 日常分享:关于时间复杂度和空间复杂度的一些优化心得分享(C#)
前言 今天分享一下日常工作中遇到的性能问题和解决方案,比较零碎,后续会持续更新(运行环境为.net core 3.1) 本次分享的案例都是由实际生产而来,经过简化后作为举例 Part 1(作为简单数据 ...
- 配置Charles 设置手机代理并允许https请求
前言: 在h5开发调试时,为实现手机app访问localhost地址,可以使用ip地址的方式,但一般公司app出于安全考虑,会限制只能访问其自有域名.因此,使用charles代理的方式 步骤 用手机代 ...
- 2021年官网下载各个版本JDK最全版与官网查阅方法
版本说明 1.安装部署JDK (1)环境 (2)官网下载JDK 由于官网的地址会随着时间的修改而更改修改下载地址,现在讲述下通用的界面操作下载JDK,以后JDK收费更严重,估计就只能下载开源的了. A ...
- jQuery 自动生成二维码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http ...