#include <cstdio> #include <cstring> #include <cstdlib> int dis[4][3]={{0,0,0},{0,1,0},{0,0,1},{0,1,1}}; struct node { node *x[26]; int num; }; struct point { int a,b; }; point zuobiao[10010]; node *tree; int r,c,ans; char stu[510][510]; char ch[50]; void create(node *&tree) { int i; tree=(node *)malloc(sizeof(node)); tree->num=-1; for(i=0;i<26;++i) tree->x[i]=NULL; } void insertTree(int n) { node *f=tree; int i,j,len=strlen(ch); // printf("CH %s LEN %d\n",ch,len); for(i=0;i<len;++i) { int p=ch[i]-'A'; if(f->x[p]==NULL) { f->x[p]=(node *)malloc(sizeof(node)); f=f->x[p]; f->num=-1; for(j=0;j<26;++j) f->x[j]=NULL; } else { f=f->x[p]; } } f->num=n; // printf("f->num=%d\n",f->num); } bool judge(int i,int j) { if(i<r&&j<c) { return true; } return false; } void searchTree(int w,int m,int e) { node *f=tree; int i=w,j=m; while(judge(i,j)) { // printf("i %d j %d e %d\n",i,j,e); int p=stu[i][j]-'A'; if(f->x[p]==NULL) return ; f=f->x[p]; if(f->num!=-1) { int o=f->num; // printf("+++++zuobiao[%d].a=%d zuobiao[%d].b=%d\n",o,zuobiao[o].a,o,zuobiao[o].b); if(zuobiao[o].a==-1) { zuobiao[o].a=w; zuobiao[o].b=m; // printf("zuobiao[%d].a=%d zuobiao[%d].b=%d\n",o,zuobiao[o].a,o,zuobiao[o].b); } } if(e==1) { i+=dis[1][1]; j+=dis[1][2]; } else if(e==2) { i+=dis[2][1]; j+=dis[2][2]; } else if(e==3) { i+=dis[3][1]; j+=dis[3][2]; } } } int main() { int i,j,k; scanf("%d%d",&r,&c);getchar(); create(tree); for(i=0;i<r;++i) { scanf("%s",stu[i]);getchar(); } getchar(); int p=-1; while(scanf("%s",ch)&&strcmp(ch,"-1")) { ++p; zuobiao[p].a=-1; zuobiao[p].b=-1; insertTree(p); } for(i=0;i<r;++i) { for(j=0;j<c;++j) { for(k=1;k<=3;++k) { searchTree(i,j,k); } } } // printf("p=%d\n",p); for(i=0;i<=p;++i) { printf("%d %d\n",zuobiao[i].a,zuobiao[i].b); } return 0; } |
Double click to view unformatted code.