UESTC 1899 P酱的冒险旅途

来源:互联网 发布:游戏耳机推荐知乎 编辑:程序博客网 时间:2024/05/01 16:53

P酱的冒险旅途

Time Limit: 1000 ms Memory Limit: 65535 kB 

 

 

 

Description

P酱是个可爱的男孩子,有一天他在野外冒险,不知不觉中走入了一块神奇的地方。他在0时刻进入这个地方,每一时刻他都只能向某一特定的方向移动长度为1的距离,当然他也可以选择不移动。移动需要花费1的时间。


各个时刻他允许移动的方向由一个字符串给出,字符串只包含U、D、L、R四种字符,其中“U”表示向上(y轴正方向)移动,“D”表示向下(y轴负方向)移动,“L”表示向左(x轴负方向)移动,“R”表示向右(x轴正方向)移动。


字符串的第x个字符代表了第x时刻P酱可以移动的方向,字符串的长度只有t,也就是说,超过t时刻,P酱就要被邪恶的魔王大爷抓走了~


现在P酱在坐标原点,即(0,0)点,而出口在(x,y)点,P酱希望在规定的时间t内尽快走到出口。帮助P酱在最短的时间内离开这里吧~

Input

第一行包含一个正数 T (T <= 100),表示数据组数。
接下来每组数据包含两行,第一行包含三个整数 x,y,t (-10^5 <= x,y <= 10^5, 0< t <= 10^5);第二行包含一个长度为t的字符串,第i个字符表示在i时刻他能移动的方向,字符串只包含“U”,“D”,“L”,“R”四种字母。

Output

对于每组数据输出一行,表示P酱到达出口的最早时刻。如果他无法在t时刻内到达出口,输出“-1”。

Sample Input

2
1 -1 5
LDRDR
-2 1 8
RRUDDLRU

Sample Output

3
-1

Hint

第一组样例:
1、P酱在0时刻位于原点(0, 0),他只能向左移动,但他选择不走。
2、P酱在1时刻依然位于原点(0, 0),他只能向下移动,于是他向下移动到了(0,-1)
3、P酱在2时刻位于(0,-1),他只能向右移动,于是他移动到了出口(1, -1),所以在3时刻,P酱离开了这片区域!

Source

第五届ACM趣味程序设计竞赛第二场(正式赛)

解题思路:

从原点到出口的最短距离肯定是最多只有两种字符组成。

因为如果一种字符能缩短距离,则对应的另一种字符就是增加距离,

且最短距离中每个字符出现次数是固定的。

这样,我们每次判断当前字符能否缩短距离就行了。

 

#include<stdio.h>  #include<stdlib.h>  #include<string.h>  #define N 100005  char str[N];  int main()  {      int x,y,t,T,i,u,l,d,r;      scanf("%d",&T);      while(T--)      {          int flag=-1;          u=0;d=0;l=0;r=0;          scanf("%d%d%d",&x,&y,&t);          getchar();          if(x<0)              l=-1*x;          else              r=x;          if(y<0)              d=y*-1;          else              u=y;          gets(str);                    for(i=0;i<t;i++)          {              if(u==0&&d==0&&l==0&&r==0)          //到达出口,此时的下标i就是最短时间            {                  flag=i;                  break;              }              if(str[i]=='U'&&u>0)                  u--;              if(str[i]=='D'&&d>0)                  d--;              if(str[i]=='L'&&l>0)                  l--;              if(str[i]=='R'&&r>0)                  r--;          }          printf("%d\n",flag);      }          return 0;  }        

0 0