#include <stdio.h>
#include <string.h>
#include <ctype.h>
char s[52][52];
char w[52];
int main()
{
memset(s, '\0', sizeof(s));
memset(w, '\0', sizeof(w));
int testCaseN = 0;
while(scanf("%d", &testCaseN) != EOF)
{
while (testCaseN--)
{
int m = 0;
int n = 0;
scanf("%d %d", &m, &n);
for (int i = 0; i < m; ++i)
{
scanf("%s", w);
for (int j = 0; j < n; ++j)
{
s[i][j] = tolower(w[j]);
}
}
int wordN = 0;
scanf("%d", &wordN);
while (wordN--)
{
scanf("%s", w);
int len = strlen(w);
for (int i = 0; i < len; ++i)
{
w[i] = tolower(w[i]);
}
bool isFound = false;
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
{
if (j + len <= n)//1. left to right
{
isFound = true;
for (int k = 0; k < len; ++k)
{
if (w[k] != s[i][j + k])
{
isFound = false;
break;
}
}
if (isFound)
{
printf("%d %d\n", i + 1, j + 1);
break;
}
}
if (isFound)
break;
if (j + 1 >= len)//2. r to l
{
isFound = true;
for (int k = 0; k < len; ++k)
{
if (w[k] != s[i][j - k])
{
isFound = false;
break;
}
}
if (isFound)
{
printf("%d %d\n", i + 1, j + 1);
break;
}
}
if (isFound)
break;
if (i + len <= m)//3. top down
{
isFound = true;
for (int k = 0; k < len; ++k)
{
if (w[k] != s[i + k][j])
{
isFound = false;
break;
}
}
if (isFound)
{
printf("%d %d\n", i + 1, j + 1);
break;
}
}
if (isFound)
break;
if (i + 1 >= len)//4. bottom up
{
isFound = true;
for (int k = 0; k < len; ++k)
{
if (w[k] != s[i - k][j])
{
isFound = false;
break;
}
}
if (isFound)
{
printf("%d %d\n", i + 1, j + 1);
break;
}
}
if (isFound)
break;
if (j + len <= n && i + 1 >= len)//5. left-bottom to right-up
{
isFound = true;
for (int k = 0; k < len; ++k)
{
if (w[k] != s[i - k][j + k])
{
isFound = false;
break;
}
}
if (isFound)
{
printf("%d %d\n", i + 1, j + 1);
break;
}
}
if (isFound)
break;
if (n - j >= len && m - i >= len)//7. left-top to right-down
{
isFound = true;
for (int k = 0; k < len; ++k)
{
if (w[k] != s[i + k][j + k])
{
isFound = false;
break;
}
}
if (isFound)
{
printf("%d %d\n", i + 1, j + 1);
break;
}
}
if (isFound)
break;
if (j + 1 >= len && i + 1 >= len)//8. right-bottom to left-top
{
isFound = true;
for (int k = 0; k < len; ++k)
{
if (w[k] != s[i - k][j - k])
{
isFound = false;
break;
}
}
if (isFound)
{
printf("%d %d\n", i + 1, j + 1);
break;
}
}
if (isFound)
break;
if (j + 1 >= len && i + len <= m)//6. right-top to left-down
{
isFound = true;
for (int k = 0; k < len; ++k)
{
if (w[k] != s[i + k][j - k])
{
isFound = false;
break;
}
}
if (isFound)
{
printf("%d %d\n", i + 1, j + 1);
break;
}
}
if (isFound)
break;
}
if (isFound)
break;
}
//if(!isFound)
// printf("51 51\n");
if(testCaseN)
printf("\n");
}
}
}
}
啊啊啊!What the fuck!
What the hell!
我已经检查了好久,对照过别人的不同版本,还是找不出哪里错了,不给我AC了!
日后有机会再做!
我需要其它水题回复信心!
求其它人能看出本代码的漏洞!
求解啊,求解!
求高人指点!