uva 1449 - Dominating Patterns
简单的AC自动机;
#include<cstdio>
#include<cstring>
#include<queue>
#define maxn 150005
using namespace std; struct node
{
int cnt;
int id;
node *a[],*tail;
}no[maxn];
int nonocount;
node *newnode()
{
node *p=no+nonocount++;
p->cnt=;
p->id=-;
memset(p->a,NULL,sizeof p->a);
p->tail=NULL;
return p;
} void build(node *root,char *s,int x)
{
int l=strlen(s);
for(int i=;i<l;i++)
{
int k=s[i]-'a';
if(root->a[k]==NULL)
root->a[k]=newnode();
root=root->a[k];
}
root->cnt++;
root->id=x;
} void gettail(node *root)
{
queue<node*>q;
q.push(root);
while(!q.empty())
{
node *fa=q.front();
q.pop();
for(int i=;i<;i++)
if(fa->a[i]!=NULL)
{
node *tmp=fa->tail;
while(tmp&&!tmp->a[i])tmp=tmp->tail;
if(!tmp)fa->a[i]->tail=root;
else fa->a[i]->tail=tmp->a[i];
q.push(fa->a[i]);
}
}
}
int num[];
void query(node *root,char *s)
{
int l=strlen(s);
node *p=root,*tmp;
for(int i=;i<l;i++)
{
int k=s[i]-'a';
while(!p->a[k]&&p!=root)p=p->tail;
p=p->a[k];
if(!p)p=root;
tmp=p;
while(tmp!=root)
{
if(tmp->cnt>=)
{
if(tmp->id!=-)
num[tmp->id]++;
}
tmp=tmp->tail;
}
}
} char s[],t[][];
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
memset(num,,sizeof num);
nonocount=;
node *p=newnode();
for(int i=;i<n;i++)
{
scanf("%s",t[i]);
build(p,t[i],i);
}
gettail(p);
scanf("%s",s);
query(p,s);
int ans=;
for(int i=;i<n;i++)
ans=max(ans,num[i]);
printf("%d\n",ans);
for(int i=;i<n;i++)
if(ans==num[i])
puts(t[i]);
}
return ;
}
uva 1449 - Dominating Patterns的更多相关文章
- UVa 1449 - Dominating Patterns (AC自动机)
题目大意:给出多个字符串模板,并给出一个文本串,求在文本串中出现最多的模板,输出最多的次数并输出该模板(若有多个满足,则按输入顺序输出). 思路:赤裸裸的 AC自动机,上模板. 代码: #includ ...
- 【UVA】1449-Dominating Patterns(AC自己主动机)
AC自己主动机的模板题.须要注意的是,对于每一个字符串,须要利用map将它映射到一个结点上,这样才干按顺序输出结果. 14360841 1449 option=com_onlinejudge& ...
- 【暑假】[实用数据结构]UVAlive 4670 Dominating Patterns
UVAlive 4670 Dominating Patterns 题目: Dominating Patterns Time Limit: 3000MS Memory Limit: Unkn ...
- Dominating Patterns
Dominating Patterns Time Limit:3000MS Memory Limit:Unknown 64bit IO Format:%lld & %llu Descr ...
- UVA1449 Dominating Patterns
UVA1449 Dominating Patterns 题目描述 有N个由小写字母组成的模式串以及一个文本串T.每个模式串可能会在文本串中出现多次.你需要找出哪些模式串在文本串T中出现的次数最多. 输 ...
- LA4670 Dominating Patterns AC自动机模板
Dominating Patterns 每次看着别人的代码改成自己的模板都很头大...空间少了个0卡了好久 裸题,用比map + string更高效的vector代替蓝书中的处理方法 #include ...
- UVa Live 4670 Dominating Patterns - Aho-Corasick自动机
题目传送门 快速的通道I 快速的通道II 题目大意 给定一堆短串,和一个文本串,问哪些短串在文本串中出现的次数最多. 我觉得刘汝佳的做法,时间复杂度有问题.只是似乎这道题短串串长太短不好卡.比如给出的 ...
- UVALive 4670 Dominating Patterns --AC自动机第一题
题意:多个模板串,一个文本串,求出那些模板串在文本串中出现次数最多. 解法:AC自动机入门模板题. 代码: #include <iostream> #include <cstdio& ...
- AC自动机 LA 4670 Dominating Patterns
题目传送门 题意:训练指南P216 分析:求出现最多次数的字串,那么对每个字串映射id,cnt记录次数求最大就可以了. #include <bits/stdc++.h> using nam ...
随机推荐
- 网格GridLayout建立
import java.awt.*;public class GridFlowout extends Frame { public GridFlowout (String str){ {setTitl ...
- c基础语法
1 连续写两个分号,第2个分号就是一条空语句,空语句实际是什么也不做,语法是正确的,编译不会出错. 空语句可以增加程序的可读性,可以作为待写的函数体.循环体.语句块.所以,空语句是可以有用的. 2 s ...
- Linux Bash终端支持中文显示
方法:修改系统变量LANG 即时生效: LANG=en_US.UTF- 永久生效: 修改.bashrc,加入 fi
- 关于FPGA异步时钟采样--结绳法的点点滴滴
一.典型方法 典型方法即双锁存器法,第一个锁存器可能出现亚稳态,但是第二个锁存器出现亚稳态的几率已经降到非常小,双锁存器虽然不能完全根除亚稳态的出现(事实上所有电路都无法根除,只能尽可能降低亚稳态的出 ...
- 异步任务(AsyncTask)
Android的UI线程主要负责处理用户的按键事件.用户触屏事件及屏幕绘图事件等,因此开发者的其他操作不应该.也不能阻塞UI线程,否则UI界面将会变得停止响应——用户感觉非常糟糕.(总之,开发者需要牢 ...
- Unity3D 中3D刚体组件的力
一般一个物体除了手动添加刚体受到重力作用外,还可以给该刚体添加一个其他的力. 这里就要涉及到一个恒定力(Constant Force)组件 首先要去掉物体的重力(因为重力是刚体组件中默认的一个向下的力 ...
- javaweb 中的乱码问题
一.post 方式 首先我们看下面一段代码,在该HTML中我们指定的编码为“UTF-8”,如图所示. 在该代码中,我们将表单数据提交给ParamServlet 处理 servlet 会将接收到的数据打 ...
- Eclipse搭建服务器
一.首先,依次点击Window -->preferences-->Server-->Runtime environment -->add,再选择Apache,选择TOMcat的 ...
- c语言学习之基础知识点介绍(十七):写入读取结构体、数组、结构体数组
一.结构体的写入和读取 //写入结构体 FILE *fp = fopen("/Users/ios/Desktop/1.data", "w"); if (fp) ...
- ubuntu14.04下安装Naigos和pnp4nagios
Nagios是一个监视系统运行状态和网络信息的监视系统.Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等. 安装环境:ubuntu14.04,全是最新的nagios和nagio ...