UVA - 10010 Where’s Waldorf?
题目大意:给一组英文,和给一串英文,判断这串英文 从 一组英文中的 哪个 字母开始的 从上下左右 左上左下右上右下八个方向中的任意一个方向找到其匹配的英文
解题思路:先从那组英文中 先找到 一串英文的首字母 然后从八个方向找 就可以了
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int main () {
bool f;
char a[100][100], c[100][100];
int N;
int t = 1;
int n, m, k;
int x, y;
scanf("%d", &N);
while ( N--) {
x = 0;
n = 0;
m = 0;
k = 0;
y = 0;
getchar();
scanf("%d%d", &n, &m);
getchar();
if (t != 1) cout<<endl;
t++;
for (int i = 0; i < n; i++ ) {
for (int j = 0; j < m; j++) {
scanf("%c", &a[i][j]);
if ( a[i][j] >= 'a' )
a[i][j] = a[i][j] - 32;
}
getchar();
}
scanf("%d", &k);
getchar();
for (int i = 0; i < k; i++) {
scanf ("%s", c[i]);
for (int j = 0; j < strlen(c[i]); j++)
if ( c[i][j] >= 'a')
c[i][j] = c[i][j] - 32;
getchar();
}
// printf("%d %d %d %d\n",n ,m ,k ,N);
for (int i = 0; i < k ; i++) {
f = 0;
for (int i2 = 0; i2 < n; i2++) {
for (int j2 = 0; j2 < m; j2++) {
if (c[i][0] == a[i2][j2]) {
f = 1;
for (int j = 1; j < strlen(c[i]); j++) {
if (c[i][j] != a[i2][j2+j] || j2+j >= m) {
f = 0;
break;
}
else f = 1;
}
if (!f)
for (int j = 1; j < strlen(c[i]); j++) {
if (c[i][j] != a[i2][j2-j] || j2 - j < 0) {
f = 0;
break;
}
else f = 1;
}
if (!f)
for (int j = 1; j < strlen(c[i]); j++) {
if (c[i][j] != a[i2+j][j2] || i2 + j >= n) {
f = 0;
break;
}
else f = 1;
}
if (!f)
for (int j = 1; j < strlen(c[i]); j++) {
if (c[i][j] != a[i2-j][j2] || i2 - j < 0) {
f = 0;
break;
}
else f = 1;
}
if (!f)
for (int j = 1; j < strlen(c[i]); j++) {
if (c[i][j] != a[i2-j][j2-j] || j2 - j < 0 || i2 - j < 0) {
f = 0;
break;
}
else f = 1;
}
if (!f)
for (int j = 1; j < strlen(c[i]); j++) {
if (c[i][j] != a[i2+j][j2+j] || j2 + j >= m || i2 + j >= n ) {
f = 0;
break;
}
else f = 1;
}
if (!f)
for (int j = 1; j < strlen(c[i]); j++) {
if (c[i][j] != a[i2+j][j2-j] || j2 - j < 0 || i2 + j >= n) {
f = 0;
break;
}
else f = 1;
}
if (!f)
for (int j = 1; j < strlen(c[i]); j++) {
if (c[i][j] != a[i2-j][j2+j] || j2 + j >= m || i2 - j < 0) {
f = 0;
break;
}
else f = 1;
}
}
if (f) { y = j2 + 1; break;}
}
if (f) { x = i2 + 1; break;}
}
if (f)
printf("%d %d\n", x, y);
}
}
return 0;
}