UESTC-2020ACM练习二H题 P酱的冒险旅途

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酱在最短的时间内离开这里吧~

Standard Input
第一行包含一个正数 T (T≤100),表示数据组数。

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

Standard Output

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

Samples

Input
2
1 -1 5
LDRDR
-2 1 8
RRUDDLRU

Output
3
-1

这一题其实就是统计字符个数,以样例第一组为例,x=1,y=-1,也就是说目标位置在起点的右边一单位、下边一单位,所以我们只需要在字符串中统计,如果R和D的个数分别达到了1,那么P酱就成功到达了终点,如果整个字符串中,R或者D的个数未达到要求,即无法到达终点。

#include<cstdio>
#include<iostream>
using namespace std;
#include<cstring>
char str[100005];
int main()
{
    int x,y,t;
    int N;
    scanf("%d",&N);
    while(N--)
    {
        scanf("%d %d %d\n",&x,&y,&t);
        scanf("%s",str);
        if(x==0&&y==0)//特殊情况
        {
            printf("0\n");
            continue;
        }
        char X,Y;//在x、y方向需要统计的字符
        if(x>=0)
        {
            X='R';
        }
        else
        {
            X='L';
            x=0-x;
        }
        if(y>=0)
        {
            Y='U';
        }
        else
        {
            Y='D';
            y=0-y;
        }
        int res=-1;
        for(int i=0;i<t;i++)
        {
            if(str[i]==X)x--;
            else if(str[i]==Y)y--;
            if(x<=0&&y<=0)
            {
                res=i+1;
                break;
            }
        }
        printf("%d\n",res);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想打球的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值