codeforces,codeforces1900

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: