#include<stdio.h>
#include<string.h>
const int N = 1008;
const int CAP = 150;
char stc[N][N];
char word[N];
int res[N][3];
int dir[8][2]={0, -1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, -1, 0, -1, -1};
int root;
int px, py;
int l, c, w;
struct Trie{
int next[CAP];
int id;
void init()
{
memset(next, -1, sizeof(next));
id = 0;
}
};
Trie node[N*100];
int size;
void myinsert(char* str, int id)
{
int len = strlen(str);
int i = 0, p = 0;
while(i < len)
{
if(node[p].next[str[i]] == -1)
{
node[p].next[str[i]] = size;
node[size++].init();
}
p = node[p].next[str[i]];
i++;
}
node[p].id = id;
}
void dfs(int cur, int x, int y, int d)
{
if(cur == -1) return;
int t = node[cur].id;
if(t > 0)
{
res[t][0] = px, res[t][1] = py, res[t][2] = d + 'A';
}
if(x < 0 || x >= l || y < 0 || y >= c) return;
dfs(node[cur].next[stc[x][y]], x + dir[d][1], y + dir[d][0], d);
}
//
void init()
{
root = 0;
node[0].init();
size = 1;
}
int main()
{
while(~scanf("%d%d%d", &l, &c, &w))
{
init();
for(int i = 0; i < l; i++)
scanf("%s", stc[i]);
for(int i = 1; i <= w; i++)
{
scanf("%s", word);
myinsert(word, i);
}
for(int i = 0; i < l; i++)
{
for(int j = 0; j < c; j++)
{
for(int k = 0; k < 8; k++)
{
px = i, py = j;
dfs(0, i, j, k);
}
}
}
for(int i = 1; i <= w; i++)
printf("%d %d %c\n", res[i][0], res[i][1], res[i][2]);
}
return 0;
}
当数组大小为 100 * 1008 * 256 会超 65535K 的内存
最多大概能开到 100 * 1008 * 150