codeforces,codeforces1900
北极熊要去钓鱼。他们计划从(sx,sy)航行到(ex,ey).然而,船只能靠风航行。每秒钟,风吹向其中一个方向:东、南、西或北。假设船当前在(x,y)处。
如果风吹向东方,船将移动到(x ^ 1,y).
如果风吹向南方,船将移动到(x,y - 1).
如果风吹向西方,船将移动到(x - 1,y).
如果风吹向北方,船将移动到(x,y ^ 1).
或者,他们可以用锚抓住船。在这种情况下,船停留在(x,y).给定几秒钟的风向,他们航行的最早时间是什么时候?
投入
第一行包含五个integerst,sx,sy,ex,ey(1 t 105,- 109 sx,sy,ex,ey 109).开始位置和结束位置将会不同。
第二行包含字符,第一个字符是第一秒的风向。它将是四种可能性之一:" E "(东)、“S”(南)、“W”(西)和“N”(北)。
输出
如果他们能在几秒钟内到达(ex,ey),打印他们能到达的最早时间。否则,打印-1 (不带引号)。
在第一个示例中,它们可以停留在第1、3秒,然后在第2、4秒移动。
在第二个例子中,他们不能航行到目的地。
#包含标准视频
#包含标准库
#包含字符串。h
int sx,sy,ex,ey;
int t;
char direc[100100];
需要,需要,拥有,需要;//每次都得初始化
int n,e,w,s;//每次都得初始化
空的计算()
{
nneed=0;eneed=0;sneed=0;wneed=0;
int tempx=ex-sx;
int tempy=ey-sy;
如果(tempx=0)
{
eneed=tempx
}
其他
{
wneed=-tempx;
}
if(tempy=0)
{
nneed=tempy
}
其他
{
sneed=-tempy;
}
}
int isposi(int a)
{
如果(一个0)
返回0;
否则返回a;
}
int compare()
{
if(isposi(nneed-n)==0 isposi(sneed-s)==0 isposi(eneed-e)==0 isposi(wneed-w)==0
返回1;
否则返回0;
}
无效求解()
{
n=0;s=0;e=0;w=0;
scanf(%s ,direc);
for(int I=0;我我)
{
开关(direc[i])
{
案例“N”:
{
n;
打破;
}
案例:
{
s;
打破;
}
案例“E”:
{
e;
打破;
}
案例“W”:
{
w;
打破;
}
}
if(compare()==1)
{
printf(%d\n ,I 1);
返回;
}
}
printf(-1 \ n );
}
int main(int argc,char *argv[])
{
while(scanf(%d %d %d %d %d ,t,sx,sy,ex,ey)!=EOF)
{
计算();//计算需要的北、东、南、西
solve();
}
返回0;
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。