题目链接:P2689 东南西北 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目描述
给出起点和终点的坐标及接下来T个时刻的风向(东南西北),每次可以选择顺风偏移1个单位或者停在原地。求到达终点的最少时间。
如果无法偏移至终点,输出“-1”。
输入格式
第一行两个正整数x1,y1,表示小明所在位置。
第二行两个正整数x2,y2,表示小明想去的位置。
第三行一个整数T,表示T个时刻。
第四至第N+3行,每行一个字符,表示风向,即东南西北的英文单词的首字母。
输出格式
最少走多少步。
样例 #1
样例输入 #1
1 1
2 2
5
E
N
W
W
N
样例输出 #1
2
样例 #2
样例输入 #2
1 1
2 2
1
W
样例输出 #2
-1
样例 #3
样例输入 #3
1 1
2 2
3
W
W
W
样例输出 #3
-1
提示
样例1:向东走一步,向北走一步。
样例2、3:无法到达。
1<=T<=50
东:East
南:South
西:West
北:North
AC code:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int x1,y1;
cin>>x1>>y1;
int pi=x1,pj=y1; // 当前位置
int x2,y2;
cin>>x2>>y2;
int tt;
cin>>tt;
string dis;
while(tt--)
{
char t;
cin>>t;
if(x1<x2 && t=='E')
dis+=t;
if(y1<y2 && t=='N')
dis+=t;
if(x1>x2 && t=='W')
dis+=t;
if(y1>y2 && t=='S')
dis+=t;
}
// cout<<dis<<endl;
int cnt=0;
for(auto i:dis)
{
if(pi<x2 && i=='E')
pi++,cnt++;
if(pj<y2 && i=='N')
pj++,cnt++;
if(pi>x2 && i=='W')
pi--,cnt++;
if(pj>y2 && i=='S')
pj--,cnt++;
}
if(pi!=x2 || pj!=y2)
cout<<-1;
else
cout<<cnt;
return 0;
}