显然是AC自动机对吧

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

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

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

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

#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N=1e7+;
char word[][],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[],*fail,*fa;
int size;
bool v;
node()
{
memset(this,,sizeof(node));
}
};
node *root;
void ini()
{
root=new node;
}
void ins(char *str)
{
int l=strlen(str+);
node *now=root;
for(int i=;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=;i<;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=;i<;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+),i=;
while(i<=l)
{
now=now->son[str[i]-'a'];
if(!now)return ;
for(node *j=now;j!=root&&j->size!=-;j=j->fail)
j->size=-;
i++;
}
}
int ans(char *str)
{
node *now=root;
int l=strlen(str+),i;
for(i=;i<=l;i++)
{
if(now->son[str[i]-'a']->size>=)break;
now=now->son[str[i]-'a'];
}
return i-;
}
}ac;
int main()
{
scanf("%d%d%s",&n,&m,s+);
for(int i=;i<=n;i++)s[i]=mapping(s[i]);//Don't forget it!
ac.ini();
for(int i=;i<=m;i++)
{
scanf("%s",word[i]+);
int l=strlen(word[i]+);
for(int j=;j<=l;j++)word[i][j]=mapping(word[i][j]);
ac.ins(word[i]);
}
ac.build();
ac.query(s);
for(int i=;i<=m;i++)printf("%d\n",ac.ans(word[i]));
return ;
}

[JSOI2012]玄武密码 题解(AC自动机)的更多相关文章

  1. 2021.11.10 P5231 [JSOI2012]玄武密码(AC自动机)

    2021.11.10 P5231 [JSOI2012]玄武密码(AC自动机) https://www.luogu.com.cn/problem/P5231 题意: 给出字符串S和若干T,求S与每个T的 ...

  2. BZOJ-4327:JSOI2012 玄武密码(AC自动机模板题)

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

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

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

  4. BZOJ4327 JSOI2012玄武密码(AC自动机)

    当然可以在SA上二分答案,但看起来会被卡log.考虑对模板串建出AC自动机,用母串在上面跑,标记上所有能到达的点.注意到达某个点时需要标记所有其通过fail指针可以走到的点,如果遇到一个标记过的点就可 ...

  5. [BZOJ4327]:[JZOI2012]玄武密码(AC自动机)

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

  6. BZOJ 4327 JSOI2012 玄武密码(后缀自动机)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4327 [题目大意] 求每个子串在母串中的最长匹配 [题解] 对母串建立后缀自动机,用每 ...

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

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

  8. 4327: JSOI2012 玄武密码

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

  9. P5231 [JSOI2012]玄武密码

    P5231 [JSOI2012]玄武密码 链接 分析: 首先对所有询问串建立AC自动机,然后扫描一遍母串,在AC自动机上走,没走到一个点,标记这个点走过了,并且它的fail树上的祖先节点也可以访问到( ...

随机推荐

  1. Python3标准库(二) re模块

    正则表达式(Regular Expression)是字符串处理的常用工具,通常被用来检索.替换那些符合某个模式(Pattern)的文本.很多程序设计语言都支持正则表达式,像Perl.Java.C/C+ ...

  2. hbase 增删改查 api 简单操作

    package com.utils; import java.io.IOException; import java.util.ArrayList; import java.util.List; im ...

  3. JSP内建对象

    ① out - javax.servlet.jsp.jspWriter    out对象用于把结果输出到网页上. 方法: 1. void clear() ;    清除输出缓冲区的内容,可是不输出到c ...

  4. ios34---GDC,dispatch_once

    // // ViewController.m // 09-掌握-GCD常用函数 // // Created by xiaomage on 16/2/18. // Copyright © 2016年 小 ...

  5. 【OI新闻】2016.10.06

    今天有人说好多OJ都狗记邓了- 翻了一下,恭喜以下OJ赢得大奖,获得狗记邓徽章一枚 一等奖Codevs 二等奖Bzoj 三等奖洛谷 后记-感悟 如果正在为OJ发愁的朋友,不要悲伤,不要心急,换一换OJ ...

  6. Scala 归约操作- - - - -reduce

    object 归约操作_reduce { def main(args: Array[String]): Unit = { val list=List(,,,,) val result=list.red ...

  7. Avito Code Challenge 2018 A~E

    A. Antipalindrome 还以为是什么神dp结果就是分情况讨论啊 原串是一串一样的字符的话输出0,是回文串的话输出n-1,否则直接输出原串长度 #include<iostream> ...

  8. [App Store Connect帮助]四、添加 App 图标、App 预览和屏幕快照(5)移除 App 预览或屏幕快照

    您可以随时移除 App 预览,但仅可在 App 状态为可编辑时才能移除屏幕快照.要了解可编辑的状态,请前往 App 状态. 必要职能:“帐户持有人”职能.“管理”职能.“App 管理”职能或“营销”职 ...

  9. hdu5926Mr. Frog’s Game

    Mr. Frog's Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  10. hdu2032

    http://acm.hdu.edu.cn/showproblem.php?pid=2032 #include<stdio.h> #include<math.h> #inclu ...