UVA 题目10010 - Where's Waldorf? (三)

2014-11-24 02:51:54 · 作者: · 浏览: 10
}
else if(StartR == i+1 && StartC > j+1){
StartR = i+1;
StartC = j+1;
}
}
}
//left - up
if(j - len + 1 >= 0 && i - len + 1 >= 0){
flag = 0;
for(k = 0;k < len;k++){
if(str[k] != Matrix[i-k][j-k]){
flag = 1;
break;
}
}
if(flag == 0){
if(StartR > i+1){
StartR = i+1;
StartC = j+1;
}
else if(StartR == i+1 && StartC > j+1){
StartR = i+1;
StartC = j+1;
}
}
}
//left - down
if(j - len + 1 >= 0 && i + len <= M){
flag = 0;
for(k = 0;k < len;k++){
if(str[k] != Matrix[i-k][j+k]){
flag = 1;
break;
}
}
if(flag == 0){
if(StartR > i+1){
StartR = i+1;
StartC = j+1;
}
else if(StartR == i+1 && StartC > j+1){
StartR = i+1;
StartC = j+1;
}
}
}
}//for j
}//for i
return 0;
}

int main (){
int i,j,Case,k,M,N;
//freopen("C:\\Users\\XIAOSI\\Desktop\\acm.txt","r",stdin);
while(scanf("%d",&Case) != EOF){
while(Case--){
scanf("%d %d",&M,&N);
//输入字符矩阵
for(i = 0;i < M;i++){
scanf("%s",temp);
for(j = 0;j < N;j++){
Matrix[i][j] = temp[j];
//转换为小写
if(Matrix[i][j] >= 'A' && Matrix[i][j] <= 'Z'){
Matrix[i][j] = Matrix[i][j] - 'A' + 'a';
}
}
}
scanf("%d",&k);
//待匹配串
for(i = 0;i < k;i++){
scanf("%s",str);
int len = strlen(str);
//转换为小写
for(j = 0;j < len;j++){
if(str[j] >= 'A' && str[j] <= 'Z'){
str[j] = str[j] - 'A' + 'a';
}
}
//printf("%s",str);
Match(M,N,StartR,StartC);
printf("%d %d\n",StartR,StartC);
}
//每组测试之间有空行
if(Case){
printf("\n");
}
}
}
return 0;
}

/*********************************
* 日期:2013-4-23
* 作者:SJF0115
* 题号: 题目10010 - Where's Waldorf
*
* 结果:AC
* 来源:UVA
* 总结:
**********************************/
#include
#include

char Matrix[51][51];
char str[21],temp[21];
int StartR,StartC;
//M行 N列
int Match(int M,int N,int &StartR,int &StartC){
int i,j,k,flag;
StartR = 51,StartC = 51;
int len = strlen(str);
for(i = 0;i < M;i++){
for(j = 0;j < N;j++){
flag = 1;
//left - right
if(j + len <= N){
flag = 0;
for(k = 0;k < len;k++){
if(str[k] != Matrix[i][j+k]){
flag = 1;
break;
}
}
if(flag == 0){
if(StartR > i+1){
S