GYM 101102 I.Simple Robot(水~)

本文介绍了一种简单的机器人路径裁剪算法,通过模拟机器人在二维平面的运动轨迹,并记录其横纵坐标的最大与最小值,确保机器人在限定范围内移动。当机器人试图超出指定区域时,算法将移除该步骤,最终输出所需移除的最少步数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description
一个机器人在一个二维平面上运动,给出运动轨迹(^v<>),问最少要去掉几步才能使得机器人运动范围在一个n*m区域内
Input
第一行一整数T表示用例组数,每组用例首先输入一整数n和m表示机器人运动的限制范围,之后一个字符串表示机器人的运动轨迹,串长不超过2e5(1<=n,m<=1e5)
Output
对于每组用例,输出使得机器人运动范围在一个n*m区域内需要删除的最少步数
Sample Input
这里写图片描述
Sample Output
1
2
Solution
简单题,模拟机器人运行轨迹,记录曾出现过的点的横纵坐标最大值和最小值,如果某一步走出去之后越过了范围,那么就把这一步删掉即可
Code

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
#define maxn 222222
int T,n,m;
char s[maxn];
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);
        int ax=0,bx=0,ay=0,by=0,x=0,y=0;
        scanf("%s",s);
        int len=strlen(s),ans=0;
        for(int i=0;i<len;i++)
        {
            int xx=x,yy=y;
            if(s[i]=='>')xx++;
            else if(s[i]=='<')xx--;
            else if(s[i]=='^')yy++;
            else yy--;
            if(max(bx,xx)-min(ax,xx)>=m||max(by,yy)-min(ay,yy)>=n)ans++;
            else 
            {
                ax=min(ax,xx),ay=min(ay,yy),bx=max(bx,xx),by=max(by,yy),x=xx,y=yy;
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值