题解 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;
}
//完了。好紧张
}