您的位置:首页 > 其它

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,不知道为什么,哎!

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: