P酱是个可爱的男孩子,有一天他在野外冒险,不知不觉中走入了一块神奇的地方。他在 0 0时刻进入这个地方,每一时刻他都只能向某一特定的方向移动长度为1的距离,当然他也可以选择不移动。移动需要花费 1 1的时间。
各个时刻他允许移动的方向由一个字符串给出,字符串只包含U
、D
、L
、R
四种字符,其中U
表示向上(
y
y轴正方向)移动,D
表示向下(
y
y轴负方向)移动,L
表示向左(
x
x轴负方向)移动,R
表示向右(
x
x轴正方向)移动。
字符串的第 x x个字符代表了第 x x时刻P酱可以移动的方向,字符串的长度只有 t t,也就是说,超过 t t时刻,P酱就要被邪恶的魔王大爷抓走了~
现在P酱在坐标原点,即 (0,0) (0,0)点,而出口在 (x,y) (x,y)点,P酱希望在规定的时间 t t内尽快走到出口。帮助P酱在最短的时间内离开这里吧~
Input
第一行包含一个正数 T T ( T≤100 T≤100),表示数据组数。
接下来每组数据包含两行,第一行包含三个整数
x,y,t
x,y,t (
−10 5 ≤x,y≤10 5 ,0<t≤10 5
−105≤x,y≤105,0<t≤105);第二行包含一个长度为
t
t的字符串,第
i
i个字符表示在
i
i时刻他能移动的方向,字符串只包含U
,D
,L
,R
四种字母。
Output
tSample input and output
Sample Input | Sample Output |
---|---|
2 1 -1 5 LDRDR -2 1 8 RRUDDLRU | 3 -1 |
Hint
第一组样例:
- P酱在 0 时刻位于原点 (0,0) ,他只能向左移动,但他选择不走。
- P酱在
1
时刻依然位于原点
(0,0)
,他只能向下移动,于是他向下移动到了
(0,−1)
- P酱在 2 时刻位于 (0,−1) ,他只能向右移动,于是他移动到了出口 (1,−1) ,所以在 3 时刻,P酱离开了这片区域!
画一下二维坐标图,P酱只会向四个方向走,左上,右上,左下,右下,其他在坐标轴上。也就是说你只要在一系列的方向中挑往目标方向靠的方向就行。
例如:左上,你肯定只会挑往左,和往右走的这两个方向。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
using namespace std;
const int maxn=1e5+50;
int ex,ey,n;
int l,r,u,d;
char at[maxn];
void init()
{
if(ex>=0)r=ex;
else l=-ex;
if(ey>=0)u=ey;
else d=-ey;
}
void arrive(char a)
{
if(a=='U'&&u!=0)
u--;
else if(a=='D'&&d!=0)
d--;
else if(a=='L'&&l!=0)
l--;
else if(a=='R'&&r!=0)
r--;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
bool flag=false;
l=0,r=0,u=0,d=0;
scanf("%d%d%d",&ex,&ey,&n);
init();
scanf("%s",at);
int k;
if(l==0&&r==0&&u==0&&d==0){k=0;flag=true;}
else{
for(int i=0;i<n;i++)
{
arrive(at[i]);
if(l==0&&r==0&&u==0&&d==0)flag=true;
if(flag)
{
k=i+1;
break;
}
}
}
if(!flag)printf("-1\n");
else printf("%d\n",k);
}
return 0;
}