洛谷 P2689 东南西北

题目链接: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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值