字符串系列――10010 Where's Waldorf?(三)
久都没弄好,最后干脆放弃运行效率(虽然本来我那程序效率就不高),找到字符就各个方向都判断不进行筛选,最后,终于AC了!!!搞了好几天。。。
贴AC代码(略长,都是重复的):
[
html]
#include
#include
#include
int i, j, l,cnt, n, m, k, rec_m, rec_n;
char letter[50][50], word[20][50], temp[50];
int search(void);
int main()
{
scanf("%d", &cnt);
while (cnt --)
{
scanf("%d%d", &m, &n);
for (i = 0; i < m; i ++)
{
scanf("%s", letter[i]);
for (j = 0; j < strlen(letter[i]); j ++)
letter[i][j] = tolower(letter[i][j]);
}
scanf("%d", &k);
for (i = 0; i < k; i ++)
{
scanf("%s", word[i]);
for (j = 0; j < strlen(word[i]); j ++)
word[i][j] = tolower(word[i][j]);
}
for (i = 0; i < k; i ++)
{
search();
printf("%d %d\n", rec_n + 1, rec_m + 1);
}
if (cnt != 0)
printf(("\n"));
}
return 0;
}
int search(void)
{
int len = strlen(word[i]);
for (j = 0; j < m; j ++)
{
for (l = 0; l < n; l ++)
{
if (word[i][0] == letter[j][l])
{
//ru
memset(temp, 0, sizeof(temp));
for (int p = 0; p < len; p++)
temp[p] = letter[j + p][l - p];
if (strcmp(temp, word[i]) == 0)
{
rec_n = j;
rec_m = l;
return 0;
}
//rd
memset(temp, 0, sizeof(temp));
for (int p = 0; p < len; p++)
temp[p] = letter[j + p][l + p];
if (strcmp(temp, word[i]) == 0)
{
rec_n = j;
rec_m = l;
return 0;
}
//r
memset(temp, 0, sizeof(temp));
for (int p = 0; p < len; p++)
temp[p] = letter[j + p][l];
if (strcmp(temp, word[i]) == 0)
{
rec_n = j;
rec_m = l;
return 0;
}
//lu
memset(temp, 0, sizeof(temp));
for (int p = 0; p < len; p++)
temp[p] = letter[j - p][l - p];
if (strcmp(temp, word[i]) == 0)
{
rec_n = j;
rec_m = l;
return 0;
}
//ld
memset(temp, 0, sizeof(temp));
for (int p = 0; p < len; p++)
temp[p] = letter[j - p][l + p];
if (strcmp(temp, word[i]) == 0)
{
rec_n = j;
rec_m = l;
return 0;
}
//l
memset(temp, 0, sizeof(temp));
for (int p = 0; p < len; p++)
temp[p] = letter[j - p][l];
if (strcmp(temp, word[i]) == 0)
{
rec_n = j;
rec_m = l;
return 0;
}
//u
memset(temp, 0, sizeof(temp));
for (int p = 0; p < len; p++)
temp[p] = letter[j][l - p];
if (strcmp(temp, word[i]) == 0)
{
rec_n = j;
rec_m = l;
return 0;
}
//d www.2cto.com
memset(temp, 0, sizeof(temp));
for (int p = 0; p < len; p++)
temp[p] = letter[j][l + p];
if (strcmp(temp, word[i]) == 0)
{
rec_n = j;
rec_m = l;
return 0;
}
}
}
}
rec_m = rec_n = 0;
return 0;
}