标签:blog http io ar os sp for on 2014
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=951
题意:给了一个字母表,然后给了若干单词,问这些单词的首地址在字母表的什么地方。
因为可以八个顺序查找,比较麻烦,但不难,之前就做个,这次在做,改进就是用数组+循环控制八个方向,而不是写了好多各个方向的代码。
代码:
#include<iostream> #include<stdio.h> #include<string.h> #include<ctype.h> using namespace std; int x[8] = {1,1,0,-1,-1,-1,0,1}; int y[8] = {0,-1,-1,-1,0,1,1,1}; int m,n; char s[50][50]; char sk[50]; int ok(int ix,int iy) { for(int i = 0;i < 8;i++) { char *p = sk; int j,k; for(j = ix,k = iy;(j >= 0 && j < n)&&(k >= 0 && k < m)&&*p != '\0';j += x[i],k += y[i],p++) { if(*p != s[j][k]) break; } if(*p == '\0') { return 1; } } return 0; } void find() { for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(ok(i,j)) { printf("%d %d\n",i+1,j+1); return; } } } } int main() { int N; cin >> N; while(N--) { cin >> n >> m; for(int i = 0;i < n;i++) cin >> s[i]; //zhuan huan wei xiao xie for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { s[i][j]=tolower(s[i][j]); } } int t; cin >> t; for(int i = 0;i < t;i++) { cin >> sk; int len = strlen(sk); for(int j = 0;j < len;j++) sk[j] = tolower(sk[j]); find(); } if(N) cout << endl; } return 0; }
标签:blog http io ar os sp for on 2014
原文地址:http://blog.csdn.net/codehypo/article/details/41630433