uestc--758--P酱的冒险旅途

来源:互联网 发布:双色球参选数据2017 编辑:程序博客网 时间:2024/05/01 17:20

P酱的冒险旅途

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
 

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

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

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

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

Input

第一行包含一个正数 TT (T100T≤100),表示数据组数。

接下来每组数据包含两行,第一行包含三个整数 x,y,tx,y,t (105x,y105,0<t105−105≤x,y≤105,0<t≤105);第二行包含一个长度为tt的字符串,第ii个字符表示在ii时刻他能移动的方向,字符串只包含UDLR四种字母。

Output

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

Sample input and output

Sample InputSample Output
21 -1 5LDRDR-2 1 8RRUDDLRU
3-1

Hint

第一组样例:

  1. P酱在00时刻位于原点(0,0)(0,0),他只能向左移动,但他选择不走。
  2. P酱在11时刻依然位于原点(0,0)(0,0),他只能向下移动,于是他向下移动到了(0,1)(0,−1)
  3. P酱在22时刻位于(0,1)(0,−1),他只能向右移动,于是他移动到了出口(1,1)(1,−1),所以在33时刻,P酱离开了这片区域!
思路:不能用DFS进行深搜,可能性太大了,会超时的。考虑最优办法,即每次走向都是朝着终点的方向的道路肯定是最优解。按照这个思路写题会方便很多。
AC代码:
#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>#define INF 0X3f3f3f using namespace std;const int MAXN=1e5+100;//用const来定义MAXN 不太明白是为什么 但是用宏定义老师出问题 char map[MAXN];int sx,sy,t,ans;bool flag;int main(){int Tcase;scanf("%d",&Tcase);while(Tcase--){scanf("%d%d%d",&sx,&sy,&t);scanf("%s",map+1);int tempx=0,tempy=0,ans=0;flag=false;for(int i=1;i<=t;i++){if(tempy==sy&&tempx==sx){flag=true;ans=i-1;break;}if(map[i]=='U'&&tempy<sy)tempy++;if(map[i]=='D'&&tempy>sy)tempy--;if(map[i]=='L'&&tempx>sx)tempx--;if(map[i]=='R'&&tempx<sx)tempx++;}if(flag)printf("%d\n",ans); elseprintf("-1\n");}return 0;}



0 0