题意:找相同字符窜首字母的地址
读题。。。。A word matches a straight, uninterrupted line of letters in the grid.The outputs of two consecutive cases will be separated by a blank line.这两句haunted都没读出来。。。。一个说字符窜必须直线,一个说输出在两组数据内,第一个没读导致我用搜索TLE,第二个WA
#include<stdio.h> #include<string.h> char str[100][100],rem[100]; int t1[]={-1,-1,-1,0,0,1,1,1}; int t2[]={-1,0,1,-1,1,-1,0,1}; int len,m,n; void Rever(int row,int col,int ans) { if(str[row][col]>='A' && str[row][col]<='Z') str[row][col]+=32; if(rem[ans]>='A' && rem[ans]<='Z') rem[ans]+=32; } int Action(int row,int col) { int ans=0,i; int x=row,y=col; Rever(row,col,ans); if(str[row][col]!=rem[ans]) return 0; for (i=0;i<8;i++) { ans=0; while(1) { Rever(row,col,ans); if(row<0 || col<0 || row>=m || col>=n || str[row][col]!=rem[ans]) break; { if(ans==len-1) return 1; ans++; row+=t1[i];col+=t2[i]; } } row=x;col=y; } return 0; } int main() { int i,j; int T,x,k; int flag; scanf("%d",&T); while(T--) { scanf("%d%d",&m,&n); for (i=0;i<m;i++) { scanf("%s",str[i]); } scanf("%d",&x); for (k=0;k<x;k++) { scanf("%s",rem); len=strlen(rem); for (i=0;i<m;i++) { for (j=0;j<n;j++) { flag=0; flag=Action(i,j); if(flag) break; } if(flag) break; } printf("%d %d\n",i+1,j+1); } if(T!=0) printf("\n"); } return 0; }