Rabbit的机器人

博客探讨了在机器人路径规划中,如何合理放置障碍物以确保最后一个指令执行后能到达未走过的位置。内容指出障碍物最多只能设置1个,并且根据最后一个指令的方向确定其位置。通过二分查找算法寻找满足条件的障碍物最右放置点,保证路径的最优化。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
首先我们明确一点,如果要放障碍物 0 号方格左右最多放一个,因为只要碰到一个就不会继续走过去了,也就是说放置多个障碍物只有最靠近 0 号方格的是有意义的。此外因为要保证最后一次到达没到过的地方,不可能两侧都放,因为这样的话要不就是不满足题意,要不就是其中一个障碍没有意义,所以障碍物的上限是 1 个。然后如果最后一个指令为 L/R,那么障碍物要放一定放在 0 号方格右侧/左侧。且以障碍物放在 0 号方格右侧为例,如果障碍物放在 x 处满足题意的话,放在 x-1 这个位\置也是满足题意的(最后向左能走得更远)。据此我们只要去查找障碍物可以摆放的最右位置,满足单调性质,用二分查就行了

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<iostream>
#include<sstream>
#include<set>
#include<map>
#include<queue>
#include<bitset>
#include<vector>
#include<limits.h>
#include<assert.h>
#define SZ(X) ((int)(X).size())
#define ALL(X) (X).begin(), (X).end()
#define REP(I, N) for (int I = 0; I < (N); ++I)
#define REPP(I, A, B) for (int I = (A); I < (B); ++I)
#define FOR(I, A, B) for (int I = (A); I <= (B); ++I)
#define FORS(I, S) for (int I = 0; S[I]; ++I)
#define RS(X) scanf("%s", (X))
#define SORT_UNIQUE(c) (sort(c.begin(),c.end()), c.resize(distance(c.begin(),unique(c.begin(),c.end()))))
#define GET_POS(c,x) (lower_bound(c.begin(),c.end(),x)-c.begin())
#define CASET int ___T; scanf("%d", &___T); for(int cs=1;cs<=___T;cs++)
#define MP make_pair
#define PB push_back
#define MS0(X) memset((X), 0, sizeof((X)))
#define MS1(X) memset((X), -1, sizeof((X)))
#define LEN(X) strlen(X)
#define F first
#define S second
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef long double LD;
typedef pair<int,int> PII;
typedef vector<int> VI;
typedef vector<LL> VL;
typedef vector<PII>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值