Word Puzzles
Time Limit: 5000MS Memory Limit: 65536K
Total Submissions: 10782 Accepted: 4076 Special Judge

Description

Word puzzles are usually simple and very entertaining for all ages. They are so entertaining that Pizza-Hut company started using table covers with word puzzles printed on them, possibly with the intent to minimise their client's perception of any possible delay in bringing them their order.

Even though word puzzles may be entertaining to solve by hand, they may become boring when they get very large. Computers do not yet get bored in solving tasks, therefore we thought you could devise a program to speedup (hopefully!) solution finding in such puzzles.

The following figure illustrates the PizzaHut puzzle. The names of the pizzas to be found in the puzzle are: MARGARITA, ALEMA, BARBECUE, TROPICAL, SUPREMA, LOUISIANA, CHEESEHAM, EUROPA, HAVAIANA, CAMPONESA. 

Your task is to produce a program that given the word puzzle and words to be found in the puzzle, determines, for each word, the position of the first letter and its orientation in the puzzle.

You can assume that the left upper corner of the puzzle is the origin, (0,0). Furthemore, the orientation of the word is marked clockwise starting with letter A for north (note: there are 8 possible directions in total).

Input

The first line of input consists of three positive numbers, the number of lines, 0 < L <= 1000, the number of columns, 0 < C <= 1000, and the number of words to be found, 0 < W <= 1000. The following L input lines, each one of size C characters, contain the word puzzle. Then at last the W words are input one per line.

Output

Your program should output, for each word (using the same order as the words were input) a triplet defining the coordinates, line and column, where the first letter of the word appears, followed by a letter indicating the orientation of the word according to the rules define above. Each value in the triplet must be separated by one space only.

Sample Input

20 20 10
QWSPILAATIRAGRAMYKEI
AGTRCLQAXLPOIJLFVBUQ
TQTKAZXVMRWALEMAPKCW
LIEACNKAZXKPOTPIZCEO
FGKLSTCBTROPICALBLBC
JEWHJEEWSMLPOEKORORA
LUPQWRNJOAAGJKMUSJAE
KRQEIOLOAOQPRTVILCBZ
QOPUCAJSPPOUTMTSLPSF
LPOUYTRFGMMLKIUISXSW
WAHCPOIYTGAKLMNAHBVA
EIAKHPLBGSMCLOGNGJML
LDTIKENVCSWQAZUAOEAL
HOPLPGEJKMNUTIIORMNC
LOIUFTGSQACAXMOPBEIO
QOASDHOPEPNBUYUYOBXB
IONIAELOJHSWASMOUTRK
HPOIYTJPLNAQWDRIBITG
LPOINUYMRTEMPTMLMNBO
PAFCOPLHAVAIANALBPFS
MARGARITA
ALEMA
BARBECUE
TROPICAL
SUPREMA
LOUISIANA
CHEESEHAM
EUROPA
HAVAIANA
CAMPONESA

Sample Output

0 15 G
2 11 C
7 18 A
4 8 C
16 13 B
4 15 E
10 3 D
5 1 E
19 7 C
11 11 H
【分析】

  听说TRIE+爆搜能过,于是我就爆搜了。

代码如下:

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define Maxn 1010
#define Maxl 1010 char s[Maxl][Maxl];
char ss[Maxl][Maxl];
int dx[]={,,,,-,-,-,,},
dy[]={,,-,-,-,,,,};
int ans[Maxn][],dr[Maxn];
int n,m; struct node
{
int son[],cnt,fail;
int num,rt,p;
}t[Maxn*];int tot; void upd(int x)
{
t[x].cnt=;t[x].p=;
memset(t[x].son,,sizeof(t[x].son));
} void read_trie(int x)
{
scanf("%s",ss[x]+);
int len=strlen(ss[x]+);
int now=;
for(int j=;j<=len;j++) ss[][j]=ss[x][len-j+];
for(int j=;j<=len;j++)
{
int ind=ss[][j]-'A'+;
if(!t[now].son[ind])
t[now].son[ind]=++tot,upd(tot);
now=t[now].son[ind];
if(j==len) t[now].cnt++,t[now].p=x;
}
} void dfs(int x,int y,int dir,int now)
{
if(t[now].p!=)
{
int q=t[now].p;
ans[q][]=x;ans[q][]=y;dr[q]=dir;
t[now].p=;
}
if(x+dx[dir]<||x+dx[dir]>n||y+dy[dir]<||y+dy[dir]>m) return;
int a=t[now].son[s[x+dx[dir]][y+dy[dir]]-'A'+];
if(a!=)
dfs(x+dx[dir],y+dy[dir],dir,a);
} void init()
{
int q;
scanf("%d%d%d",&n,&m,&q);
for(int i=;i<=n;i++)
{
scanf("%s",s[i]+);
}
tot=;upd();
for(int i=;i<=q;i++)
{
read_trie(i);
}
for(int i=;i<=n+;i++)
for(int j=;j<=m+;j++)
{
for(int k=;k<=;k++)
{
dfs(i,j,k,);
}
}
for(int i=;i<=q;i++)
{
printf("%d %d %c\n",ans[i][]-,ans[i][]-,dr[i]+'A'-);
}
} int main()
{
init();
return ;
}

[POJ1204]

2016-06-19 14:09:06



后来还是打了一下AC自动机,嗯,感觉for那里还是超级慢,因为重叠那部分不好搞,就这样吧。

代码如下:

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define Maxn 1010
#define Maxl 1010 char s[Maxl][Maxl];
char ss[Maxl][Maxl];
int dx[]={,,,,-,-,-,,},
dy[]={,,-,-,-,,,,};
int ans[Maxn][],dr[Maxn];
int n,m,qy; struct node
{
int son[],cnt,fail;
int num,rt;
}t[Maxn*];int tot; int p[Maxn]; void upd(int x)
{
t[x].cnt=;/*t[x].p=0;*/
memset(t[x].son,,sizeof(t[x].son));
} void read_trie(int x)
{
scanf("%s",ss[x]+);
int len=strlen(ss[x]+);
int now=;
for(int j=;j<=len;j++) ss[][j]=ss[x][len-j+];
for(int j=;j<=len;j++)
{
int ind=ss[][j]-'A'+;
if(!t[now].son[ind])
t[now].son[ind]=++tot,upd(tot);
now=t[now].son[ind];
if(j==len) t[now].cnt++,p[x]=now;
}
} queue<int > q;
void build_AC()
{
int i,j,x,y;
while(!q.empty()) q.pop();
q.push();
while(!q.empty())
{
x=q.front();
y=t[x].fail;
for(j=;j<=;j++)
{
if(t[x].son[j])
{
q.push(t[x].son[j]);
t[t[x].son[j]].fail=x?t[y].son[j]:x;
}
else t[x].son[j]=t[y].son[j];
}
q.pop();
}
} void check(int x,int y,int dir,int now)
{
if(now==) return;
for(int i=;i<=qy;i++) if(p[i]==now)
{
ans[i][]=x;
ans[i][]=y;
dr[i]=dir;
}
now=t[now].fail;
check(x,y,dir,now);
} void dfs(int x,int y,int dir,int now)
{
now=t[now].son[s[x][y]-'A'+];
check(x,y,dir,now);
x=x+dx[dir],y=y+dy[dir];
if(x<||x>n||y<||y>m) return;
dfs(x,y,dir,now); } void init()
{
scanf("%d%d%d",&n,&m,&qy);
for(int i=;i<=n;i++)
{
scanf("%s",s[i]+);
}
tot=;upd();
for(int i=;i<=qy;i++)
{
read_trie(i);
}
build_AC();
for(int i=;i<=n;i++)
for(int k=;k<=;k++)
{
dfs(i,,k,);
dfs(i,m,k,);
}
for(int j=;j<=m;j++)
for(int k=;k<=;k++)
{
dfs(,j,k,);
dfs(n,j,k,);
}
for(int i=;i<=qy;i++)
{
printf("%d %d %c\n",ans[i][]-,ans[i][]-,dr[i]+'A'-);
}
} int main()
{
init();
return ;
}

[POJ1204-2]

2016-06-21 17:14:17

												

【 POJ - 1204 Word Puzzles】(Trie+爆搜|AC自动机)的更多相关文章

  1. [POJ 1204]Word Puzzles(Trie树暴搜&amp;AC自己主动机)

    Description Word puzzles are usually simple and very entertaining for all ages. They are so entertai ...

  2. [poj] 1204 Word Puzzles || AC自动机

    原题 给个X*Y的字符串矩阵,W个询问,对每个询问输出这个串出现的位置及方向,共有8个方向,顺时针开始分别用A~H表示 AC自动机的板子题. 对于待匹配串建一个自动机,然后从矩阵的四周分别沿八个方向跑 ...

  3. POJ 1204 Word Puzzles | AC 自动鸡

    题目: 给一个字母矩阵和几个模式串,矩阵中的字符串可以有8个方向 输出每个模式串开头在矩阵中出现的坐标和这个串的方向 题解: 我们可以把模式串搞成AC自动机,然后枚举矩阵最外围一层的每个字母,向八个方 ...

  4. POJ 1204 Word Puzzles(AC自动机)

    这题的数据卡在,如下: 5 5 3 ABCDE FGHIJ KLMNO PQRST UVWXY PQR RS RST puzzle中间的行中可以包含要查询的多个单词.这个问题很好解决,SearchDf ...

  5. poj 1204 Word Puzzles(字典树)

    题目链接:http://poj.org/problem?id=1204 思路分析:由于题目数据较弱,使用暴力搜索:对于所有查找的单词建立一棵字典树,在图中的每个坐标,往8个方向搜索查找即可: 需要注意 ...

  6. [知识点]Trie树和AC自动机

    // 此博文为迁移而来,写于2015年5月27日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w1s8.html 1.前 ...

  7. 从Trie谈到AC自动机

    ZJOI的SAM让我深受打击,WJZ大神怒D陈老师之T3是SAM裸题orz...我还怎么混?暂且写篇`从Trie谈到AC自动机`骗骗经验. Trie Trie是一种好玩的数据结构.它的每个结点存的是字 ...

  8. POJ 题目1204 Word Puzzles(AC自己主动机,多个方向查询)

    Word Puzzles Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 10244   Accepted: 3864   S ...

  9. PKU 1204 Word Puzzles(AC自动机)

    题目大意:原题链接 给定一个字符串矩阵和待查找的单词,可以朝8个不同的方向查找,输出待查找单词第一个字母在矩阵中出现的位置和该单词被查到的方向. A~H代表8个不同的方向,A代表正北方向,其他依次以4 ...

随机推荐

  1. myeclipse 编码问题

    在使用eclipse+MyEclipse开发中,许多文件编码默认是ISO-8859-1,不支持中文(如常用的JSP),这样我们每次建文件都要手动改编码,其实我们可以在设置文件默认编码,今后再创建时就不 ...

  2. session的固化(搁置)

    Session在其生命周期中,可能会在运行时状态和持久化状态之间转换. 会话从运行时状态变为持久化状态的过程称为 -- 搁置:在以下情况下,Session会被搁置: 当服务器总之或单个Web应用终止时 ...

  3. safe_mode(php安全模式)

    简单说,PHP安全模式就是以安全模式运行php. php的安全模式提供一个基本安全的共享环境,在一个有多个用户帐户存在的php开放的web服务器上.当一个web服务器上运行的php打开了安全模式,那么 ...

  4. ubuntu中安装eclipse 分类: android ubuntu linux 学习笔记 2015-07-07 10:19 75人阅读 评论(0) 收藏

    上一篇说了安装jdk的事,于是趁热打铁,决定把eclipse也安装了. 下载这一系列就不用说了. 下载完成之后: 然后解压,解压之后文件剪切到/usr/software文件夹中,同时重命名为eclip ...

  5. oracle口令管理之允许某个用户最多尝试三次登录

    如果一个用户连续三次登录失败,则锁定该用户两天,两天之后该用户才能重新登录. 创建profile文件: 更新账户: 三次登录失败后用户就会被锁定: 用户锁住之后要怎么给他解锁: 解锁之后就可以正常登录 ...

  6. CSS背景颜色、背景图片、平铺、定位、固定

    CSS背景颜色设置 background-color:red;如设置背景颜色为红色: 背景颜色设置支持3种写法: 颜色名 16进制 rgb CSS背景图片颜色设置 background-image:u ...

  7. css3遇到的一些属性

    rgba          是由red.green.blue 三种颜色搭配出来的box-shadow     向元素添加阴影层,水平阴影位置,垂直阴影位置,后面是可选:模糊距离,阴影大小,颜色,是否是 ...

  8. IE浏览器div错乱问题

    这个问题属于各浏览器的兼容问题,有时候在其他浏览器中,html页面布局都是正常显示,唯独IE浏览器的div块布局错乱了,可能是html文件上面的报头标准出现错误. 就是一段报头,告诉浏览器,你的文档以 ...

  9. A题笔记(10)

    No.1390 代码:https://code.csdn.net/snippets/191965  另一版本:https://code.csdn.net/snippets/192009 考察点有两个: ...

  10. maven中tomcat7-maven-plugin插件的使用

    1.(挺清晰,但是我在项目上尝试没有成功) http://blog.csdn.net/yhhazr/article/details/7866501 2.(算是有一些详细的运行命令吧,例如自动打包命令或 ...