uva 10010 - Where's Waldorf?

题目地址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;
}

 

 

posted on 2013-11-27 19:22  云在心  阅读(196)  评论(0)    收藏  举报

导航