BZOJ 4327 【JSOI 2012】 玄武密码 AC自动机+dfs
题目描述
输入
输出
样例输入
7 3
SNNSSNS
NNSS
NNN
WSEE
样例输出
4
2
0
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#define N 10000000
using namespace std;
int n,st,pt,tot=0;
char str[105],ptr[N],cnt[N];
int head[500000],to[500000],last[500000],num=0;
int fail[500000],date[500000][26],deep[N],ans[N];
bool vis[500000];
int opt[500000],fa[500000];
void ins(int u,int v)
{last[++num]=head[u];head[u]=num;to[num]=v;return ;
}
queue<int> q;
void build()
{for(int i=0;i<4;i++)if(date[0][i])q.push(date[0][i]);while(!q.empty()){int re=q.front();q.pop();for(int i=0;i<4;i++){if(!date[re][i]){date[re][i]=date[fail[re]][i];continue;}q.push(date[re][i]);fail[date[re][i]]=date[fail[re]][i];}}
}
void dfs(int x)
{for(int i=head[x];i;i=last[i]){deep[to[i]]=deep[x]+1;fa[to[i]]=x;dfs(to[i]);}
}
int tra(char ch)
{return ch == 'E' ? 0 : ch == 'S' ? 1 : ch == 'W' ? 2 : 3;
}
int main()
{
// freopen("in.in","r",stdin);
// freopen("my.out","w",stdout);scanf("%d%d",&pt,&n);scanf("%s",ptr+1);for(int i=1;i<=n;i++){scanf("%s",str+1);st=strlen(str+1);int t=0;for(int j=1;j<=st;j++){if(!date[t][tra(str[j])]) date[t][tra(str[j])]=++tot,ins(t,tot);t=date[t][tra(str[j])];}opt[i]=t;}build();dfs(0);int j=0;vis[0]=1;for(int i=1;i<=pt;i++){int re=tra(ptr[i]);j=date[j][re];vis[j]=1;int t=fail[j];while(t && !vis[t]) vis[t]=1,t=fail[t];}for(int i=1;i<=n;i++){int t=opt[i];while(t!=0 && !vis[t]) t=fa[t]; if(t==0) ans[i]=0;else ans[i]=deep[t];printf("%d\n",ans[i]);}return 0;
}
BZOJ 4327 【JSOI 2012】 玄武密码 AC自动机+dfs相关推荐
- BZOJ 4327 [JSOI2012]玄武密码 (AC自动机)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4327 题解: 做法挺显然,建出AC自动机之后在上面跑,标记所有走过的点,然后再进行递推 ...
- 【bzoj4327】JSOI2012 玄武密码 AC自动机
题目描述 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此. 很多年后,人们 ...
- 【BZOJ4327】JSOI2012 玄武密码 AC自动机
[BZOJ4327]JSOI2012 玄武密码 Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香 ...
- bzoj4327: JSOI2012 玄武密码 AC自动机
bzoj4327: JSOI2012 玄武密码 Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香 ...
- BZOJ_4327_JSOI2012 玄武密码_AC自动机
BZOJ_4327_JSOI2012 玄武密码_AC自动机 Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便 ...
- bzoj 1030: [JSOI2007]文本生成器(AC自动机+DP)
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 5187 Solved: 2136 [Submit][St ...
- 洛谷 P-4045 密码(AC自动机+状态压缩+数位DP+乱搞)
洛谷 P-4045 密码 记AC的第一道黑题! 题意:已知一段密码包含了一些字符串,然后求满足条件的密码有多少个,数量小于42时还得全部输出 思路: 一开始WA了两个点,不知道WA的什么,索性把读入的 ...
- [JSOI2009]密码——AC自动机+记忆化搜索(状压)
题面 Bzoj1559 解析 要求一个能包含所有字符串的串的个数,联想到AC自动机. 每一个节点需要存一个终点信息,即以这个点为结尾的字符串编号,这个需要开一个vector来存,因为一个节点需要继承 ...
- BZOJ 1444 [JSOI2009]有趣的游戏 (AC自动机、概率与期望DP、矩阵乘法)
诶这题洛谷居然没有??? 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1444 题解: 我见到主要有两种做法. 一是矩阵乘法.设\(d ...
最新文章
- 如何保证Qt状态机的最佳性能
- sc修改服务器,华为sc服务器配置方法
- 中小企业网络结构设计1(华为版)
- 【Flutter】Hero 动画 ( Hero 动画使用流程 | 创建 Hero 动画核心组件 | 创建源页面 | 创建目的页面 | 页面跳转 )
- koa2异常处理_读 koa2 源码后的一些思考与实践
- 算命数据_未来的数据科学家或算命精神向导
- android键盘事件
- QComboBox列表项高度设置
- java 动态报表 sql,报表SQL
- 1、java 的安装及资料下载
- StringUtil类的常用方法
- c语言常用的100个程序,100个经典C语言程序,大家可以进来看看。
- VSTO:无法安装此应用程序,因为已安装具有相同标识的应用程序(亲测有效)
- 【校园卡】2020移动联通电信校园卡对比
- SUV世家广汽三菱,牵手微信企业号打造学习型企业
- THREE将左键改为平移右键改为旋转
- WEB应用防火墙(WAF启明设备)
- 问题——Word中一级标题离页眉很近
- 如何制定客户留存策略_运营参考|促活、拉新、留存、变现,7种策略教你做好用户运营...
- uniApp小程序转快应用
热门文章
- Creator3D:shader14_噪声消融
- oracle数据库进入控制台,oracle web浏览器无法打开控制台的解决办法
- 首屏加载从11s到1s,详解前端性能优化
- 常用CV数据集(持续更新中)
- abp 链接本地mysql_abp vNext 使用Mysql 数据库
- 李航第二章课后习题答案
- WebGL探索——抉择:实践方向(twgl.js、Filament、Claygl、BabylonJS、ThreeJS、LayaboxJS、SceneJS、ThinkJS、ThingJS)
- python excel转csv两列互换,python excel转换csv代码实例
- linux gcc忽略警告,gcc 禁止warning
- 秃头大牛一文竟然就把SpringCloudStream(SCS)给讲明白了?