题解 P2689 【东南西北】

· · 题解

《第一次发题解,好紧张》

先统计小明分在东南西北能到达的最大范围。再判断终点坐标是否在范围内。

如果在范围外直接返回-1。如果在范围内,那么最小步数必然是东西方向的差的绝对值和南方方向差的绝对值。

至于偏移的过程并不重要。其实挺好理解的,直接上代码了

#include<iostream>
#include<algorithm>
using namespace std;
int e,n,w,s,x1,y1,x2,y2,t;//四个方向,起点终点坐标,偏移次数 
char c;//方向 
int main(){
    ios::sync_with_stdio(false);
    cin>>x1>>y1>>x2>>y2>>t;
    e=w=x1;n=s=y1;//偏移前四个方向的范围就是起点本点 
    for(int i=1;i<=t;i++){  //确定四个方向最大范围 
        cin>>c;
        if(c=='E') e++;
        if(c=='W') w--;
        if(c=='N') n++;
        if(c=='S') s--;
    }
    if(x2<w||x2>e||y2<s||y2>n){ //如果终点在范围外 
        cout<<-1<<endl;return 0;
    }else{  //既然不在的话 ,输出横竖方向差的和 
        cout<<abs(x2-x1)+abs(y2-y1)<<endl;
        return 0;
    }
    //完了。好紧张 
}