题意:

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6208
给出n个字符串,要求找到一个字符串包含其他所有的字符串。


思路:

肯定是最长的那个字符串,如果存在两个不一样的额且长度都是最长的字符串,就肯定找不到。否则就用AC自动机跑一遍所有的串即可。


代码:

#include <bits/stdc++.h>
using namespace std;
#define maxn 100005
#define maxm 100005struct trie {int next[maxn][26], fail[maxn], end[maxn];int root, cnt;int new_node () {memset (next[cnt], -1, sizeof next[cnt]);end[cnt++] = 0;return cnt-1;}void init () {cnt = 0;root = new_node ();}void insert (char *buf) {//字典树插入一个单词int len = strlen (buf);int now = root;for (int i = 0; i < len; i++) {int id = buf[i]-'a';if (next[now][id] == -1) {next[now][id] = new_node ();}now = next[now][id];}end[now]++;}void build () {//构建fail指针queue <int> q;fail[root] = root;for (int i = 0; i < 26; i++) {if (next[root][i] == -1) {next[root][i] = root;}else {fail[next[root][i]] = root;q.push (next[root][i]);}}while (!q.empty ()) {int now = q.front (); q.pop ();for (int i = 0; i < 26; i++) {if (next[now][i] == -1) {next[now][i] = next[fail[now]][i];}else {fail[next[now][i]] = next[fail[now]][i];q.push (next[now][i]);}}}}int query (char *buf) {int len = strlen (buf);int now = root;int res = 0;for (int i = 0; i < len; i++) {int id = buf[i]-'a';now = next[now][id];int tmp = now;while (tmp != root) {if (end[tmp]) {res += end[tmp];end[tmp] = 0;}tmp = fail[tmp];//沿着失配边走}}return res;}
}ac;int n;
char t[maxm], str[maxm];
string s[maxm];int main () {//freopen("in.txt", "r", stdin);int T;scanf ("%d", &T);while (T--) {scanf ("%d", &n);ac.init ();int maxlen = 0, id = -1;for (int i = 1; i <= n; i++) {scanf("%s", t);//cout << t << endl;s[i] = (string)t;ac.insert(t);int len = strlen(t);if (len > maxlen) {id = i;maxlen = len;}}bool flag = true;for (int i = 1; i <= n; i++) {if ((int)s[i].length() == maxlen) {if (s[i] != s[id]) {flag = false;break;}}}if (!flag) {puts("No");continue;}ac.build ();strcpy(str, s[id].c_str());int ans = ac.query(str);if (ans >= n) puts(str);else puts("No");}return 0;
}

HDU 6208 AC自动机相关推荐

  1. HDU 6208 AC自动机 或 暴力?

    简略题意:问是否存在一个串,其他串都是他的子串. 看了题目之后,可以明确一点,极限数据的情况下,暴力一定过不了. 有可能成为目标串的一定是最长串,所有串建AC自动机,用最长串去匹配.如果匹配到了所有串 ...

  2. hdu 3065 AC自动机

    // hdu 3065 AC自动机 // // 题目大意: // // 给你n个短串,然后给你一个长串,问:各个短串在长串中,出现了多少次 // // 解题思路: // // AC自动机,插入,构建, ...

  3. hdu 3962(AC自动机+矩阵优化dp)

    转载标记处:http://blog.csdn.net/woshi250hua/article/details/7599472 题目大意:给定m个DNA病毒序列,求碱基构成的长度为n且含有两个以上DNA ...

  4. hdu 2222 ac自动机

    对于ac自动机的具体内容,请看如下博客:http://www.cppblog.com/mythit/archive/2009/04/21/80633.html 写的挺好的. 要了解ac自动机就要先知道 ...

  5. HDU 2222 AC自动机

    AC自动机模板题. 什么是Fai指针,指向出现了的最长后缀. 怎么统计,匹配到了模式串,但是,是仅仅一个当前的节点数吗? 不是的,还要继续往Fail指针上走,统计所有的cnt之和. 这个题目设计到,每 ...

  6. HDU 6096 AC自动机

    题解:  主要的思路就是怎么能让这两个串链接起来,还有就是明白AC自动机主要处理什么问题,知道了这些这个问题就能很好的解决了.. #include<bits/stdc++.h> #defi ...

  7. hdu 2222 AC 自动机 模版(数组实现)

    AC 自动机 模版 原文匹配查找时讲错了,其他都挺好(原文博主知错懒得改 t个样例,n个单词,一个文本串,求文本串中单词出现的次数. 若给出单词ab,ab 文本ab,匹配数为2 若给出 n个不重复的单 ...

  8. HDU 2222(AC自动机模板)

    AC自动机这个算法网上有很多资料,这里就不多赘述了. 当从一个字符串中查找另一个字符串,我们有快速的算法KMP. 现在的问题是要从一个字符串中查找很多字符串,或者要从多个字符串里分别查找很多字符串.A ...

  9. HDU 2222 ac自动机模板

    题意: 求n个模板串在匹配串中出现了几个. SOL: 反正就是模板啦...似乎比KMP都简单----这么说似乎有点不道德...毕竟先看的KMP而他们并没有什么不同... 貌似自己的理解和他们画的图还是 ...

最新文章

  1. Redis进阶实战用法深剖析
  2. QT的QSharedDataPointer类的使用
  3. PDFPlumber使用入门+python实现PDF中表格转化为Excel的方法
  4. odoo10参考系列--网络控制器(Web Controllers)
  5. Unity3D基础15:触发器
  6. 【BZOJ3294】放棋子(动态规划,容斥,组合数学)
  7. ASP.Net中防止页面刷新重复提交的几种方法
  8. VBA实战代码大全-下载
  9. 微博android4.1.2,Fuubo微博(新浪微博第三方客户端)app
  10. 资源共享的两阶段交叉效率DEA模型及matlab应用:地区科技投入产出效率案例分析,文后有网盘链接
  11. 用计算机做雕塑的,做电脑雕刻工资怎样
  12. SLA服务可用性4个9是什么意思?怎么达到?
  13. 美团内部讲座 | 清华大学崔鹏:因果推断技术最新的发展趋势
  14. 介绍一个成功的 Git 分支模型
  15. php artisan tanker,Artisan 开发
  16. Lifecycle 使用与源码分析——彻底搞懂Lifecycle原理
  17. 数据库中用户登录注册用户信息表怎么设计如何设计
  18. jsp+servlet学子商城项目--servlet、dao层的各项练习
  19. Windows下验证https证书
  20. TCP/IP协议类比生活案例

热门文章

  1. 8月13日第五人格服务器维修中,第五人格8月13日更新了什么 8月13日更新内容介绍...
  2. C#创建文件写入及追加内容
  3. IntelliJ IDEA 编译Java代码时,中文乱码问题
  4. 林丹的杀球分解图,发力真流畅
  5. HDFS架构原理思想及各模块功能简述
  6. 【element】el-collapse-中折叠面板箭头图标位置调整往左边
  7. 基于双视角图表示算法的双向人职匹配偏好建模推荐系统构建
  8. 运用scheme协议唤起外部app
  9. 腾讯起诉vivo不正当竞争;链家程序员删除公司9TB数据被判7年;iPhone关机后仍在运行,或成恶意软件温床 | EA周报...
  10. 写给.NET程序员:不要困在自己建造的盒子里