C++,Lutece 758 P酱的冒险旅途

/*
Migrated from Lutece 758 P酱的冒险旅途
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。
*/
#include <iostream>
#include <string>
#include <map>
void solve(){
    int x,y,t;std::cin>>x>>y>>t;
    std::string dirs;std::cin>>dirs;
    if(x==0&&y==0){
        std::cout<<0<<std::endl;
        return;
    }
    for(int i = 0;i<t;++i){
        char dir = dirs[i];
        if(x>0&&dir=='R')--x;
        if(x<0&&dir=='L')++x;
        if(y>0&&dir=='U')--y;
        if(y<0&&dir=='D')++y;
        if(x==0&&y==0){
            std::cout<<i+1<<std::endl;
            return;
        }
    }
    if(x!=0||y!=0){
        std::cout<<-1<<std::endl;
    }
}
int main(){
    int T;std::cin>>T;
    while(T--){
        solve();
    }
}
posted @ 2025-03-19 21:47  Kazuma_124  阅读(139)  评论(0)    收藏  举报