uva 10010 - Where's Waldorf?
2013-11-27 19:22
429 查看
题目地址http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=951
这题并不是很难,要在8个方向上做判断,纯属量的问题,做了很多次测试,一直wa,不知道为什么,哎!
这题并不是很难,要在8个方向上做判断,纯属量的问题,做了很多次测试,一直wa,不知道为什么,哎!
#include<iostream> #include<string> using namespace std; int m,n; void searchWordlof(string a[],string s){ int x=51,y=51; for(int i=0;i<m;i++){ int pos,tempx,tempy,revtemp,start=0; while((pos=a[i].find(s[0],start))!=-1&&start<n){ //水平向右判断 tempx=pos,revtemp=0; while(n-pos>=s.size()&&revtemp<s.size()&&a[i][tempx]==s[revtemp]){tempx++,revtemp++;} if(revtemp==s.size()){ if(i!=x){ x=(i<x)?i:x; y=(i==x)?pos:y; } else y=(y<pos)?y:pos; start=pos+1; if(start<n) continue; else break; } //水平向左判断 tempx=pos,revtemp=0; while(pos+1>=s.size()&&revtemp<s.size()&&a[i][tempx]==s[revtemp]){tempx--,revtemp++;} if(revtemp==s.size()){ if(i!=x) { x=(i<x)?i:x; y=(i==x)?pos:y; } else y=(y<pos)?y:pos; start=pos+1; if(start<n) continue; else break; } //垂直向下判断 tempx=i,revtemp=0; while(m-i>=s.size()&&revtemp<s.size()&&a[tempx][pos]==s[revtemp]){tempx++,revtemp++;} if(revtemp==s.size()){ if(i!=x) { x=(i<x)?i:x; y=(i==x)?pos:y; } else y=(y<pos)?y:pos; start=pos+1; if(start<n) continue; else break; } //垂直向上判断 tempx=i,revtemp=0; while(i+1>=s.size()&&revtemp<s.size()&&a[tempx][pos]==s[revtemp]){tempx--,revtemp++;} if(revtemp==s.size()){ if(i!=x) { x=(i<x)?i:x; y=(i==x)?pos:y; } else y=(y<pos)?y:pos; start=pos+1; if(start<n) continue; else break; } //左上方向判断 tempx=i,tempy=pos,revtemp=0; while(i+1>=s.size()&&pos+1>=s.size()&&revtemp<s.size()&&a[tempx][tempy]==s[revtemp]){tempx--,tempy--,revtemp++;} if(revtemp==s.size()){ if(i!=x) { x=(i<x)?i:x; y=(i==x)?pos:y; } else y=(y<pos)?y:pos; start=pos+1; if(start<n) continue; else break; } //右上方向判断 tempx=i,tempy=pos,revtemp=0; while(i+1>=s.size()&&n-pos>=s.size()&&revtemp<s.size()&&a[tempx][tempy]==s[revtemp]){tempx--,tempy++,revtemp++;} if(revtemp==s.size()){ if(i!=x) { x=(i<x)?i:x; y=(i==x)?pos:y; } else y=(y<pos)?y:pos; start=pos+1; if(start<n) continue; else break; } //左下方向判断 tempx=i,tempy=pos,revtemp=0; while(m-i>=s.size()&&pos+1>=s.size()&&revtemp<s.size()&&a[tempx][tempy]==s[revtemp]){tempx++,tempy--,revtemp++;} if(revtemp==s.size()){ if(i!=x) { x=(i<x)?i:x; y=(i==x)?pos:y; } else y=(y<pos)?y:pos; start=pos+1; if(start<n) continue; else break; } //右下方向判断 tempx=i,tempy=pos,revtemp=0; while(m-i>=s.size()&&n-pos>=s.size()&&revtemp<s.size()&&a[tempx][tempy]==s[revtemp]){tempx++,tempy++,revtemp++;} if(revtemp==s.size()){ if(i!=x) { x=(i<x)?i:x; y=(i==x)?pos:y; } else y=(y<pos)?y:pos; start=pos+1; if(start<n) continue; else break; } start=pos+1; } } cout<<x+1<<' '<<y+1<<endl; } int main(){ int ca,k; string Matri[50],WordList[20]; cin>>ca; while(ca--){ cin>>m>>n; for(int i=0;i<m;i++){ cin>>Matri[i]; for(int j=0;j<n;j++) if(islower(Matri[i][j])){ Matri[i][j]-=32; //都转为大写 } } cin>>k; for(int i=0;i<k;i++){ cin>>WordList[i]; for(int j=0;j<WordList[i].size();j++){ if(islower(WordList[i][j])) WordList[i][j]-=32; //都转为大写 } } for(int i=0;i<k;i++){ searchWordlof(Matri,WordList[i]); if(i<k-1) cout<<endl; } } //system("pause"); return 0; }
相关文章推荐
- [算法练习] UVA-10010-Where's Waldorf?
- uva 10010 - Where's Waldorf?
- UVa-10010-Where's Waldorf?
- UVa 10010 Where's Waldorf?
- 匹配行UVA 题目10010 - Where's Waldorf?
- UVa 10010 - Where's Waldorf?
- UVA 10010 Where's Waldorf?
- UVa 10010 Where's Waldorf?
- Uva 10010 - Where's Waldorf?
- uva 10010 Where's Waldorf?
- UVA 10010 - Where's Waldorf?
- UVA 10010-- Where's Waldorf?(暴力串处理)
- UVA - 10010 Where's Waldorf?
- UVa 10010 - Where's Waldorf?
- UVa-Where's Waldorf?
- uva 10010 Where's Waldorf?
- UVa 10010 - Where's Waldorf?
- UVa: 10010 - Where's Waldorf?
- UVA 10010 Where's Waldorf?
- UVA - 10010 Where's Waldorf?