[poj] 1204 Word Puzzles || AC自动机
原题
给个X*Y的字符串矩阵,W个询问,对每个询问输出这个串出现的位置及方向,共有8个方向,顺时针开始分别用A~H表示
AC自动机的板子题。
对于待匹配串建一个自动机,然后从矩阵的四周分别沿八个方向跑,找到一个串的时候就记录答案,但不能退出。
另:方向要找好啊!!
#include<cstdio>
#include<cstring>
#define N 1010
using namespace std;
int x,y,n,ansx[N],ansy[N],d[N],l[N];
//int dx[10]={0,0,1,1,1,0,-1,-1,-1},dy[10]={0,1,1,0,-1,-1,-1,0,1};
int dx[10]={0,-1,-1,0,1,1,1,0,-1},dy[10]={0,0,1,1,1,0,-1,-1,-1};
char t[N][N],s[N],r[10]=" ABCDEFGH";
struct hhh
{
int data;
hhh *child[26],*fail;
hhh()
{
fail=NULL;
data=0;
for (int i=0;i<26;i++) child[i]=NULL;
}
};
hhh *root=new hhh;
hhh *now,*tmp;
hhh* q[100*1000+10];
void add(int x)
{
now=root;
for (int i=1;i<=l[x];i++)
{
if (now->child[s[i]-'A']==NULL)
now->child[s[i]-'A']=new hhh;
now=now->child[s[i]-'A'];
}
now->data=x;
}
void bfs()
{
int l=0,r=0;
root->fail=root;
for (int i=0;i<26;i++)
{
if (root->child[i]==NULL)
root->child[i]=root;
else
root->child[i]->fail=root,q[r++]=(root->child[i]);
}
while (r!=l)
{
hhh* nw=q[l++];
for (int i=0;i<26;i++)
{
if (nw->child[i])
{
now=nw->child[i];
if (now!=root) q[r++]=now;
if (now->fail==NULL) now->fail=nw->fail->child[i];
}
else nw->child[i]=nw->fail->child[i];
if (nw->data==0 && nw->fail->data)
nw->data=nw->fail->data;
}
}
}
void find(int a,int b,int i)
{
now=root;
while (1)
{
if (a<=0 || a>x) break;
if (b<=0 || b>y) break;
now=now->child[t[a][b]-'A'];
tmp=now;
while (tmp->data)
{
int tp=tmp->data;
ansx[tp]=a-dx[i]*(l[tp]-1);
ansy[tp]=b-dy[i]*(l[tp]-1);
d[tp]=i;
tmp=tmp->fail;
}
a+=dx[i];
b+=dy[i];
}
}
int main()
{
scanf("%d%d%d",&x,&y,&n);
for (int i=1;i<=x;i++)
scanf("%s",t[i]+1);
for (int i=1;i<=n;i++)
{
scanf("%s",s+1);
l[i]=strlen(s+1);
add(i);
}
bfs();
for (int i=1;i<=8;i++)
{
for (int j=1;j<=x;j++)
{
find(j,1,i);
find(j,y,i);
}
for (int j=1;j<=y;j++)
{
find(1,j,i);
find(x,j,i);
}
}
for (int i=1;i<=n;i++)
printf("%d %d %c\n",ansx[i]-1,ansy[i]-1,r[d[i]]);
return 0;
}
[poj] 1204 Word Puzzles || AC自动机的更多相关文章
- PKU 1204 Word Puzzles(AC自动机)
题目大意:原题链接 给定一个字符串矩阵和待查找的单词,可以朝8个不同的方向查找,输出待查找单词第一个字母在矩阵中出现的位置和该单词被查到的方向. A~H代表8个不同的方向,A代表正北方向,其他依次以4 ...
- POJ 1204 Word Puzzles | AC 自动鸡
题目: 给一个字母矩阵和几个模式串,矩阵中的字符串可以有8个方向 输出每个模式串开头在矩阵中出现的坐标和这个串的方向 题解: 我们可以把模式串搞成AC自动机,然后枚举矩阵最外围一层的每个字母,向八个方 ...
- 【 POJ - 1204 Word Puzzles】(Trie+爆搜|AC自动机)
Word Puzzles Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 10782 Accepted: 4076 Special ...
- [POJ 1204]Word Puzzles(Trie树暴搜&AC自己主动机)
Description Word puzzles are usually simple and very entertaining for all ages. They are so entertai ...
- pku1204 Word Puzzles AC自动机 二维字符串矩阵8个方向找模式串的起点坐标以及方向 挺好的!
/** 题目:pku1204 Word Puzzles 链接:http://poj.org/problem?id=1204 题意:给定一个L C(C <= 1000, L <= 1000) ...
- POJ 1204 Word Puzzles(AC自动机)
这题的数据卡在,如下: 5 5 3 ABCDE FGHIJ KLMNO PQRST UVWXY PQR RS RST puzzle中间的行中可以包含要查询的多个单词.这个问题很好解决,SearchDf ...
- poj 1204 Word Puzzles(字典树)
题目链接:http://poj.org/problem?id=1204 思路分析:由于题目数据较弱,使用暴力搜索:对于所有查找的单词建立一棵字典树,在图中的每个坐标,往8个方向搜索查找即可: 需要注意 ...
- POJ 题目1204 Word Puzzles(AC自己主动机,多个方向查询)
Word Puzzles Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 10244 Accepted: 3864 S ...
- poj 2778 DNA Sequence ac自动机+矩阵快速幂
链接:http://poj.org/problem?id=2778 题意:给定不超过10串,每串长度不超过10的灾难基因:问在之后给定的长度不超过2e9的基因长度中不包含灾难基因的基因有多少中? DN ...
随机推荐
- P2661 信息传递 DFS
题目链接:洛谷 P2661 信息传递 一个人要想知道自己的生日,就意味着信息的传递是成环的,因为每轮信息只能传递一个人,传递的轮数就等于环的大小 环的大小就等于环中的两个点到第三个点的距离之和加一,我 ...
- js、jquery中全局替换replace
str.replace(/需要替换的/g,"新字符串") //此处使用正则表达式
- Ubuntu安装MySQL及使用Xshell连接MySQL出现的问题(2003-Can't connect to MySql server及1045错误)
不管在什么地方,什么时候,学习是快速提升自己的能力的一种体现!!!!!!!!!!! 以下所有的命令都是在root用户下操作(如果还没有设置root密码)如下: 安装好Ubuntu系统之后,打开终端先设 ...
- 微信小程序CheckBox选中事件
1.微信小程CheckBox选中问题 <checkbox-group bindchange="checkboxChange" data-index="{{index ...
- html页面 加载完成后再刷新 一次
主要用于第一次加载页面有部分加载bug,再刷新一次即可正常运行. 简单粗暴直接上代码,不带参数,0影响 <Script>function refresh(){ url = location ...
- paramiko基本操作
paramiko 是一个用作远程控制的模块,它遵循SSH2协议,支持以加密和认证的方式来进行远程服务器的连接.操作.上传和下载. 官方文档地址:http://docs.paramiko.org/ pa ...
- flask项目实战--论坛
项目结构搭建 1:用pycharm创建flask bbs项目 2:分别创建config.py.exts.py.models.py.manage.py文件 创建一个apps包存放前台,后台,公共的模块 ...
- easyPOI导出excel报错
http-nio--exec- at :: - excel cell export error ,data is :com.jn.ssr.superrescue.web.qc.dto.Automati ...
- 18式优雅你的Python
本文来自读者梁云同学的投稿,公众号:Python与算法之美 一,优雅你的Jupyter 1,更改Jupyter Notebook初始工作路径 平凡方法: 在cmd中输入jupyter notebook ...
- talent-aio源码阅读小记(一)
近来在oschina上看到一个很火的java 即时通讯项目talent-aio,恰巧想了解一下这方面的东西,就阅读了一下项目的源码,这里对自己阅读源码后的一些心得体会做一下备忘,也希望能够对其他项目中 ...