题意:

  就是求是否有一个串 是其它所有串的母串

解析:

  把所有的串都加入到trie数中  然后用最长的串去匹配就好了

emm。。开始理解错题意了。。。看成了只要存在一个串是另一个的母串就好。。

然后输出这样的串。。。用后缀数组写完后。。。才发现  理解错了 emm。。

指针的会超时emm。。。然后才学了 用数组写

#include<stdio.h>
#include<string.h>
#include<queue>
#include<string>
#include<iostream>
#define maxn 1000010
using namespace std;
int n;
int nxt[maxn][],fail[maxn],edd[maxn],root,L;//nxt记录节点,在这里edd指针代表以当前节点为字符串尾的字符串个数
int vis[maxn];
int newnode()
{
for(int i=;i<;i++)
nxt[L][i]=-;//节点连接的边初始化为-1
edd[L]=;
vis[L]=;
return L++;
}
void init()
{
L=;
root=newnode();
} void insert(char *str)//trie树的建立
{
int l = strlen(str);
int now=root;
for(int i=;i<l;i++)
{
int x = str[i] - 'a';
if(nxt[now][x]==-)nxt[now][x]=newnode();
now=nxt[now][x];
}
edd[now]++;
}
void build()//建立ac自动机
{
queue<int> Q;
for(int i=;i<;i++)
{
if(nxt[root][i]==-)nxt[root][i]=root;
else //若有连边则将节点加入队列 ,并将fail指针指向root
{
fail[nxt[root][i]]=root;
Q.push(nxt[root][i]);
}
}
while(!Q.empty())
{
int now=Q.front();
Q.pop();
for(int i=;i<;i++)
{
if(nxt[now][i]==-) //若无连边,则将该边指向当前节点fail指针指向的相应字符连接的节点
nxt[now][i]=nxt[fail[now]][i];
else //若有连边,则将儿子节点的fail指针指向当前节点fail指针指向相应字符接的节点
{
fail[nxt[now][i]]=nxt[fail[now]][i];
Q.push(nxt[now][i]); //加入队列继续遍历
}
}
}
}
int query(char str[])
{
int l = strlen(str);
int now=root;
int res=;
for(int i=;i<l;i++)
{
int x = str[i] - 'a';
now=nxt[now][x];
int temp=now;
while(temp!=root&&vis[temp]==)//根据题目要求改变形式
{
res+=edd[temp];
edd[temp]=;
vis[temp]=;
temp=fail[temp];
}
}
return res; //在这里返回的是匹配到的模式串的数量
}
char str[maxn], ans[maxn];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
init();
int ma=;
for(int i=;i<n;i++)
{
scanf("%s",str);
int l=strlen(str);
if(ma<l)
{
ma=l;
strcpy(ans,str);
}
insert(str);
}
build();
int sum=query(ans);
if(sum==n) puts(ans);
else puts("No");
}
}

The Dominator of Strings HDU - 6208(ac自动机板题)的更多相关文章

  1. HDU - 6208 The Dominator of Strings HDU - 6208 AC自动机 || 后缀自动机

    https://vjudge.net/problem/HDU-6208 首先可以知道最长那个串肯定是答案 然后,相当于用n - 1个模式串去匹配这个主串,看看有多少个能匹配. 普通kmp的话,每次都要 ...

  2. HDU 2222 AC自动机模板题

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=2222 AC自动机模板题 我现在对AC自动机的理解还一般,就贴一下我参考学习的两篇博客的链接: http: ...

  3. HDU 3065 (AC自动机模板题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 题目大意:多个模式串,范围是大写字母.匹配串的字符范围是(0~127).问匹配串中含有哪几种模 ...

  4. HDU 2896 (AC自动机模板题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2896 题目大意:多个模式串.多个匹配串.其中串的字符范围是(0~127).问匹配串中含有哪几个模式串 ...

  5. hdu 2222(AC自动机模版题)

    Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

  6. 2017 ACM/ICPC Asia Regional Qingdao Online 1003 The Dominator of Strings hdu 6208

    The Dominator of Strings Time Limit: 3000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java ...

  7. HDU 2222 AC自动机 裸题

    题意: 问母串中出现多少个模式串 注意ac自动机的节点总数 #include <stdio.h> #include <string.h> #include <queue& ...

  8. Keywords Search HDU - 2222(ac自动机板题。。)

    求一个字符串上有多少个匹配的单词 看着卿学姐的板子写的 指针形式: #include <iostream> #include <cstdio> #include <sst ...

  9. HDU 2222 AC自动机模版题

    所学的AC自动机都源于斌哥和昀神的想法. 题意:求目标串中出现了几个模式串. 使用一个int型的end数组记录,查询一次. #include <cstdio> #include <c ...

随机推荐

  1. 沧桑巨变中焕发青春活力-记极1s HC5661A 打怪升级之路

    最近发现一个新货umaxhosting年付10美元的便宜VPS.2杯喜茶的价格可以让你在国外拥有一个1024MB (1GB) DDR3 RAM.1024MB (1GB) vSwap.70GB RAID ...

  2. TP里where的查询方式,比如or应该怎么写?

    这应该是个基础..只是我没有系统的学TP,所以用到了临时查了手册. 正常来说,thinkphp里的查询方式是: ThinkPHP可以支持直接使用字符串作为查询条件,但是大多数情况推荐使用数组或者对象来 ...

  3. 小冷-wireshark的标志位的值是啥

    小冷系列之 wireshark的标志位的值是啥,在用wireshark抓包时,发现Flags = 0x002(SYN),很好奇0x002是什么意思. 好不好先上图: 上图是一个三次握手第一次的标志位, ...

  4. SQL Server 各版本安装包分享

    已将SQL Server 2005以上各版本的安装包分享到百度云盘,有需要的朋友可以下载进行安装,相关安装教程可以百度搜索.安装遇到难以解决的问题可以留言给我,2016版以上在选择功能的时候建议初学者 ...

  5. 关于docker线上部署时间问题

    背景 公司线上部署采用docker swarm方式,这几天线上项目时间突然出了问题(ps:第一反应,我去,这也能出问题,代码里肯定藏毒了),线上时间总跟实际时间差八个小时.本着速战速决的原则,把所有时 ...

  6. Linux加密到K8S中

    文件名字 test.conf 加密:  base64 --wrap=0 aaa.conf 把得到的密钥填入配置文件当中即可

  7. PHP 预定义变量

    1.$_SERVER <?php $a=$_SERVER; var_dump($a); ?> 2.$_FILES <?php if($_FILES){ echo "< ...

  8. 第十二次ScrumMeeting博客

    第十二次ScrumMeeting博客 本次会议于11月30日(四)22时整在3公寓725房间召开,持续35分钟. 与会人员:刘畅.辛德泰.张安澜.赵奕.方科栋. 1. 每个人的工作(有Issue的内容 ...

  9. java代码生成xml 报错:HIERARCHY_REQUEST_ERR: 尝试在不允许的位置插入节点。

    document.appendChild(controlElement)好像只能append一个根节点

  10. 09慕课网《进击Node.js基础(一)》HTTP-get/request

    get是对request封装 可以在后台发起http请求,获取远程资源,更新或者同步远程资源 http.request(options[,callback]) 以下代码灌水失败: var http = ...