寻找宝藏

//寻找宝藏
#include<iostream>
using namespace std;
int x[11];
int y[11];
int main(){
    
int n;
    
char dic;//方向 
    int des;//距离 
    int tx,ty;
    
while(cin>>n){
        x[
0]=y[0]=0;
        
for(int i=1;i<=n;i++){
            cin
>>dic>>des;
            
switch(dic){
                
case 'E'://东 x 加, y不变 
                    x[i]=x[i-1]+des;
                    y[i]
=y[i-1];
                    
break;
                
case 'N'://北 y 加, x不变 
                    x[i]=x[i-1];
                    y[i]
=y[i-1]+des;
                    
break;
                
case 'S':
                    x[i]
=x[i-1];
                    y[i]
=y[i-1]-des;
                    
break;
                
default://W 其它为西 
                    x[i]=x[i-1]-des;
                    y[i]
=y[i-1];
                    
break;    
            }

          
// cout<<" x:"<<x[i]<<" y:"<<y[i]<<endl;
        }

        cin
>>tx>>ty;//地雷
        bool has=false;//有地雷? 
        for(int i=1;i<=n;i++){
            
if(
            (x[i]
==tx&&x[i-1]==tx&&//x相等 
            ((y[i]<=ty&&ty<=y[i-1])||(y[i]>=ty&&ty>=y[i-1])))//ty位于两个y之间
            ||
             (y[i]
==ty&&y[i-1]==ty&&//或y相等 
            ((x[i]<=tx&&tx<=x[i-1])||(x[i]>=tx&&tx>=x[i-1])))//tx位于两个x之间
            )//就是有雷 
            has=true;
        }
    
        
if(has)
                cout
<<"No"<<endl;//不去了 
        else 
                cout
<<"Yes"<<endl;//没雷就去 
        
    }

}

 

 

 

 

xian得到了一份藏宝图,图中写了一大串的字母和数字,暗藏这宝藏的坐标。xian研究了很久,终于明白了其中的奥秘。字母表示方向,字母后的数字表示向那个方向走几步。例如 E6,说明向东走6步(x坐标加6)。xian很高兴,终于可以找到宝藏了。但这时ss告诉他:在找宝藏的路上有致命的陷阱,并且ss已经找出了陷阱的坐标。xian想要宝藏,当他又不想死在路上,现在请你告诉他是去还是不去?

注:字母只有4个,分别是N(北),S(南),E(东),W(西),按地图上的方向为准。数字是正整数。xian的原来的位置坐标都是(0,0)。

输入

先输入n(n<10). 接着有n+1行,前n行每行由一个字母和一个数字组成,中间空格分开。最后一行有两个数字,表示陷阱的坐标。
输入以EOF结束。

输出

若陷阱在xian去寻宝的路上,则输出No,否则为Yes.

样例输入

4
N 6
E 3
E 2
W 1
7 7
3
E 7
S 2
W 1
6 0
 
样例输出

Yes
No

posted @ 2008-07-26 00:39  tiny羊  阅读(174)  评论(0编辑  收藏  举报