int t; char direc[100100]; int nneed,eneed,wneed,sneed;//每次都得初始化 int n,e,w,s;//每次都得初始化 void caculate
- If the wind blows to the east, the boat will move to (x + 1, y).
- If the wind blows to the south, the boat will move to (x, y - 1).
- If the wind blows to the west, the boat will move to (x - 1, y).
- If the wind blows to the north, the boat will move to (x, y + 1).
Alternatively, they can hold the boat by the anchor. In this case, the boat stays at (x, y). Given the wind direction for t seconds, what is the earliest time they sail to (ex, ey)?
Input
The first line contains five integers t, sx, sy, ex, ey (1 ≤ t ≤ 105, - 109 ≤ sx, sy, ex, ey ≤ 109). The starting location and the ending location will be different.
The second line contains t characters, the i-th character is the wind blowing direction at the i-th second. It will be one of the four possibilities: "E" (east), "S" (south), "W" (west) and "N" (north).
Output
If they can reach (ex, ey) within t seconds, print the earliest time they can achieve it. Otherwise, print "-1" (without quotes).
5 0 0 1 1 SESNW
output
4
input
10 5 3 3 6 NENSWESNEE
output
-1
Note
In the first sample, they can stay at seconds 1, 3, and move at seconds 2, 4.
In the second sample, they cannot sail to the destination.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int sx,sy,ex,ey;
int t;
char direc[100100];
int nneed,eneed,wneed,sneed;//每次都得初始化
int n,e,w,s;//每次都得初始化
void caculate()
{
nneed=0;eneed=0;sneed=0;wneed=0;
int tempx=ex-sx;
int tempy=ey-sy;
if(tempx>=0)
{
eneed=tempx;
}
else
{
wneed=-tempx;
}
if(tempy>=0)
{
nneed=tempy;
}
else
{
sneed=-tempy;
}
}
int isposi(int a)
{
if(a<0)
return 0;
else return a;
}
int compare()
{
if(isposi(nneed-n)==0&&isposi(sneed-s)==0&&isposi(eneed-e)==0&&isposi(wneed-w)==0)
return 1;
else return 0;
}
void solve()
{
n=0;s=0;e=0;w=0;
scanf("%s",direc);
for(int i=0;i<t;i++)
{
switch(direc[i])
{
case 'N':
{
n++;
break;
}
case 'S':
{
s++;
break;
}
case 'E':
{
e++;
break;
}
case 'W':
{
w++;
break;
}
}
if(compare()==1)
{
printf("%d\n",i+1);
return;
}
}
printf("-1\n");
}
int main(int argc, char *argv[])
{
while(scanf("%d %d %d %d %d",&t,&sx,&sy,&ex,&ey)!=EOF)
{
caculate();//算计须要的n,e,s,w
solve();
}
return 0;
}
606aca26da5d 8 月前
3b2b80b03ec8 8 月前