显然是AC自动机对吧

插入单词之后把文章在自动机上跑一遍,到达过的节点打上花火标记

之后检查一下每个单词有几个标记即可

可以把题目中的4个字母映射成abcd方便遍历

一定要记得把文章也映射啊!

#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N=1e7+5;
char word[100005][105],s[N];
int n,m;
char mapping(char ch)
{switch(ch){case 'E':return 'a';break;case 'S':return 'b';break;case 'W':return 'c';break;case 'N':return 'd';break;}
}
struct AC_auto
{struct node{node *son[7],*fail,*fa;int size;bool v;node(){memset(this,0,sizeof(node));}};node *root;void ini(){root=new node;}void ins(char *str){int l=strlen(str+1);node *now=root;for(int i=1;i<=l;i++){if(!now->son[str[i]-'a'])now->son[str[i]-'a']=new node();now=now->son[str[i]-'a'];}now->size++;}void build(){queue<node*> q;for(int i=0;i<4;i++){if(root->son[i]){q.push(root->son[i]);root->son[i]->fail=root;}else root->son[i]=root;}while(!q.empty()){node *x=q.front();q.pop();for(int i=0;i<4;i++){if(x->son[i]){x->son[i]->fail=x->fail->son[i];q.push(x->son[i]);}else x->son[i]=x->fail->son[i];}}}void query(char *str){node *now=root;int l=strlen(str+1),i=1;while(i<=l){now=now->son[str[i]-'a'];if(!now)return ;for(node *j=now;j!=root&&j->size!=-1;j=j->fail)j->size=-1;i++;}}int ans(char *str){node *now=root;int l=strlen(str+1),i;for(i=1;i<=l;i++){if(now->son[str[i]-'a']->size>=0)break;now=now->son[str[i]-'a'];}return i-1;}
}ac;
int main()
{scanf("%d%d%s",&n,&m,s+1);for(int i=1;i<=n;i++)s[i]=mapping(s[i]);//Don't forget it!
    ac.ini();for(int i=1;i<=m;i++){scanf("%s",word[i]+1);int l=strlen(word[i]+1);for(int j=1;j<=l;j++)word[i][j]=mapping(word[i][j]);ac.ins(word[i]);}ac.build();ac.query(s);for(int i=1;i<=m;i++)printf("%d\n",ac.ans(word[i]));return 0;
}

转载于:https://www.cnblogs.com/Rorschach-XR/p/11021952.html

[JSOI2012]玄武密码 题解(AC自动机)相关推荐

  1. 【BZOJ4327】[JSOI2012] 玄武密码(AC自动机的小应用)

    点此看题面 大致题意: 给你一个长度为lenlenlen的文本串和nnn个模式串,让你求出每一个模式串的前缀与文本串的最大匹配串长度(其中模式串和文本串都只由字符'E','S','W','N'组成). ...

  2. 【题解】「JSOI2012」玄武密码(AC自动机)

    题面 [题目描述] 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此. 很多年 ...

  3. 【BZOJ4327】JSOI2012 玄武密码 AC自动机

    [BZOJ4327]JSOI2012 玄武密码 Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香 ...

  4. 【bzoj4327】JSOI2012 玄武密码 AC自动机

    题目描述 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此.  很多年后,人们 ...

  5. bzoj4327: JSOI2012 玄武密码 AC自动机

    bzoj4327: JSOI2012 玄武密码 Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香 ...

  6. [FROM WOJ]#3744 JSOI2012 玄武密码

    #3744 JSOI2012 玄武密码 题面 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神 ...

  7. P5231 [JSOI2012]玄武密码(SAM 经典运用)

    [JSOI2012]玄武密码 题目背景 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天 ...

  8. BZOJ 4327 [JSOI2012]玄武密码 (AC自动机)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4327 题解: 做法挺显然,建出AC自动机之后在上面跑,标记所有走过的点,然后再进行递推 ...

  9. BZOJ4327 : JSOI2012 玄武密码

    对所有询问串建立AC自动机. 然后将母串在AC自动机上跑,每走到一个点x,从x点出发沿着fail指针能到的所有前缀都是匹配成功的,暴力向上走,碰到走过的就break,这样每个点最多只会被标记一次. 时 ...

  10. BZOJ4327:[JSOI2012]玄武密码(SAM)

    Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此.  ...

最新文章

  1. 如何在Mac下显示Finder中的所有文件
  2. 使用测试工具解决产品问题(译)
  3. 项目: 实时钟表(C语言)
  4. wordpress漏洞_WordPress站点恶意JS注入漏洞分析
  5. ONNX系列一 --- 带有ONNX的便携式神经网络
  6. oracle表,视图,存储过程,函数,序列.....查询
  7. 高中计算机编程软件vb,高中年级VB程序设计全套教案.doc
  8. Java IO流(精简版)
  9. c语言自学文档,自学c语言(全套资料)
  10. 黑苹果双系统时间不一致_黑苹果系统与windows时间差问题的解决
  11. ue4创建c++类编译失败
  12. 现代企业管理的12法宝(zt)
  13. bulter机器人_机器人库早报|特拉华大学通过人工智能扩大发展劳动力 1.5 倍
  14. bzoj-4318 OSU! 【数学期望】
  15. 一般人我不告诉的bug
  16. 洛谷 P2440 木材加工(二分,含边界处理的笔记)
  17. python xlutils模块安装_python接口测试,第三方包xlrd和xlutils,怎么安装
  18. 9.9 力扣652. 寻找重复的子树
  19. ios和Android端ijkplayer集成及使用
  20. Elias Kiritsis《String Theory in a Nutshell》(埃利亚斯·基里西斯《简明弦论》)中文目录

热门文章

  1. sql union用法和sql union all用法,sql union效率
  2. 收下这10个终身学习资源号,Max你的工作效率
  3. 如何在一场面试中展现你对Python的coding能力?
  4. bugku-管理员登录-(X-forwarded-for)
  5. 孤荷凌寒自学python第八十天开始写Python的第一个爬虫10
  6. vue-cli工具搭建vue-webpack项目
  7. 关于console.log() 打印得引用类型得数据得相关问题
  8. jquery+thinkphp实现跨域抓取数据的方法
  9. touch事件详解【译文】
  10. [转]java中的io笔记