https://www.luogu.org/problem/show?pid=2689
由题意显然只用朝两个方向走,确定下来这两个方向以后,比对每个时刻的风向即可
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
#define ms(i,j) memset(i, j, sizeof i);
int x1,x2,y1,y2,T;
char dirx, diry;
char ch;
int ans;
int abss(int x)
{
return x>=0 ? x : -x;
}
int main()
{
scanf("%d%d%d%d\n%d\n", &x1, &y1, &x2, &y2, &T);
int x = x2-x1; int y = y2-y1;
int ax = abss(x) , ay = abss(y);
if (x>0) dirx = 'N'; else dirx = 'S';
if (y>0) diry = 'E'; else diry = 'W';
for (int i=1;i<=T;i++)
{
scanf("%c", &ch);
if (ch==dirx) ax--;
if (ch==diry) ay--;
if (ax<=0&&ay<=0) break;
scanf("\n");
}
if (ax<=0&&ay<=0) printf("%d\n",abss(x)+abss(y)); else printf("-1\n");
return 0;
}

本文提供了一种解决洛谷2689题目(关于路径选择算法)的方法,通过确定两个主要方向并根据风向调整路径来计算最短距离。代码采用C++实现,包括读取起点和终点坐标、确定移动方向以及根据每一步风向更新剩余距离。

1115

被折叠的 条评论
为什么被折叠?



