题解 P2689 【东南西北】
这道题主要先判断从起点到终点的方向,再有技巧的运用一下map就可以过了。下附代码:
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
map<char,int>fx; //定义方向
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
int x,y,x1,y1;
scanf("%d%d",&x,&y);
scanf("%d%d",&x1,&y1);
if(x1>x)fx['E']=1,fx['W']=0;//如果终点横坐标比起点大,那么风向E是正方向,W不动
if(y1>y)fx['N']=1,fx['S']=0;//如果终点纵坐标比起点大,那么风向N是正方向,S不动
if(x1<x)fx['E']=0,fx['W']=-1;//反之
if(y1<y)fx['N']=0,fx['S']=-1;//反之
int t;
scanf("%d",&t);
int sum=0;
for(int i=1;i<=t;i++)
{
char c;
cin>>c;//读入风向
if((c=='E'||c=='W')&&x!=x1)
{
x+=fx[c];
if(fx[c]!=0)sum++;//如果移动累加次数
}//如果是东西方向移动,直接处理
if((c=='N'||c=='S')&&y!=y1)
{
y+=fx[c];
if(fx[c]!=0)sum++;//如果移动累加次数
}//如果是南北方向移动,直接处理
}
if(x==x1&&y==y1)cout<<sum;
else cout<<-1;//输出结果
return 0;
}