Maze 1D 题解
题目大意
在数轴上给定一串行动指令,类型有两种:向左移动一个单位 / 向右移动一个单位。要求最后一步到达一个没有到达过的位置。可以在数轴上放置若干个障碍物阻碍移动,问在放置的障碍物最少的情况下有多少放置方式。
思路分析
结论题。
结论一:障碍物的数目不多于 \(1\)。
- 证明:
若可以在不放置任何障碍物的情况下满足要求,那么障碍物的数目为 \(0\),放置方式为 \(1\)。
否则,一定可以通过放置恰好一个障碍物达成目标。
考虑放置两个障碍物的情况:
- 二者都在原点同侧:
此时离原点更远的障碍物没有任何作用,可以舍去。
- 一个在左一个在右:
如果两个障碍物都被触碰到,那么意味着所有可以被到达的地方均被到达过,不满足要求。
反之,如果存在一个障碍物没有被触碰到,那么它没有作用,可以舍去。
更多障碍物的情况可以归结为这两种情况的组合。
结论二:若最后一步往左,那么障碍物在原点右侧,否则障碍物在原点左侧。
- 证明:
考虑反证法:
假设最后一步往左,且障碍物在原点左侧:
考虑到中途一定会触碰障碍物,所以总到达的区间是:左侧障碍物,右侧不确定,但最后一步移动起始的位置一定位于这个区间内,又因为区间左侧被封死,所以不可能到达新的位置。与要求矛盾,故结论成立,右侧同理。
结论三:障碍物放置的合法区间一定是从原点到某一点的连续区间。
- 证明:
考虑到移动序列长度有限,故障碍物一定存在一个最远的可以放置的点,那么将障碍物从这个点向原点靠近,抵消的不利操作一定会越来越多,考虑到其单调性,结论显然成立。
在有了这三个结论之后这题就比较简单了:
二分找出最远的能放置的点,二分的判定直接暴力模拟即可。
代码
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=1001000;
int n;
int vis[N<<1];
char inp[N];
bool walk(int B){//模拟
int x=N,res;
for(int i=1;i<=n;i++){
vis[x]=1;
if(inp[i]=='R'&&x+1!=B) x++;
if(inp[i]=='L'&&x-1!=B) x--;
}
res=!vis[x];
x=N;
for(int i=1;i<=n;i++){//清空
vis[x]=0;
if(inp[i]=='R'&&x+1!=B) x++;
if(inp[i]=='L'&&x-1!=B) x--;
}
return res;
}
int main(){
scanf("%s",inp+1);
n=strlen(inp+1);
if(walk(-N)){cout<<"1\n";return 0;}//先判断不放合不合法
if(inp[n]=='L'){//看最后一步往哪边
int l=N,r=N*2;
while(l<r){
int mid=(l+r+1)>>1;
if(walk(mid)) l=mid;
else r=mid-1;
}
cout<<l-N<<'\n';
}
if(inp[n]=='R'){
int l=1,r=N;
while(l<r){
int mid=(l+r)>>1;
if(walk(mid)) r=mid;
else l=mid+1;
}
cout<<N-r<<'\n';
}
return 0;
}
Maze 1D 题解的更多相关文章
- 【noip 模拟赛curse,light,maze】 题解
2018.10.16 总结:考的不好 原因: 1.考的时候没状态,读题读不进去 2.考的时候不仔细,该得分没得到 T1:curse 1.咒语 (curse.pas/c/cpp) [题目描述] 亮亮梦到 ...
- 【luogu P1825 [USACO11OPEN]玉米田迷宫Corn Maze】 题解
题目链接:https://www.luogu.org/problemnew/show/P1825 带有传送门的迷宫问题 #include <cstdio> #include <cst ...
- Codeforces 404E: Maze 1D(二分)
题意:指令“R”机器人会向右走一步,“L”是向左.起初机器人在0位置,可以在除了0以外的任何位置放障碍,如果机器人的指令将使它走到障碍上,那这一步他会保持不动.要求让机器人最终结束的那一步一定只走过一 ...
- 算法与数据结构基础 - 广度优先搜索(BFS)
BFS基础 广度优先搜索(Breadth First Search)用于按离始节点距离.由近到远渐次访问图的节点,可视化BFS 通常使用队列(queue)结构模拟BFS过程,关于queue见:算法与数 ...
- 算法与数据结构基础 - 深度优先搜索(DFS)
DFS基础 深度优先搜索(Depth First Search)是一种搜索思路,相比广度优先搜索(BFS),DFS对每一个分枝路径深入到不能再深入为止,其应用于树/图的遍历.嵌套关系处理.回溯等,可以 ...
- NEKO's Maze Game - Codeforces 题解
题目 NEKO#ΦωΦ has just got a new maze game on her PC! The game's main puzzle is a maze, in the forms o ...
- LightOJ 1027 A Dangerous Maze(期望)题解
题意:n扇门,每扇门后都有一个值x,如果x<0会让你等待-x再重新回到这里选择门,x>0你经过x时间就会被传送走,问你被传送走的期望 思路:假设被传送走的期望为E,那么对于x<0来说 ...
- 题解 CF1292A 【NEKO's Maze Game】
有一个结论: 当 \((1,1)\) 不能抵达 \((2,n)\) 时,必定存在一个点对,这两个点的值均为真,且坐标中的 \(x\) 互异,\(y\) 的差 \(\leq 1\) 这个结论的正确性感觉 ...
- CF round 623 Div.1D Tourism 题解
题目链接:https://codeforces.com/contest/1314/problem/D 大意: \(n\) 个顶点的有向图,顶点编号为 \(1\) 到 \(n\),任意两个不同的顶点 \ ...
- hdu4035 Maze 题解
/* 设 E[i]表示在结点i处,要走出迷宫所要走的边数的期望. E[i] = ki*E[1] + (1-ki-ei)*E[fa[i]] + (1-ki-ei); E[i] = ki*E[1] + ( ...
随机推荐
- XTTS系列之四:迷迷糊糊的并行度
项目测试组又反馈一个问题,XTTS执行全量备份速度慢,影响测试进度. 实际算了下,平均速度才150MB/s.. 这个速度在客户生产环境的确是不够看,首先询问是否开了并行,开了多少? 回复是说有开32个 ...
- 记一次.Net分布式事务死锁现象以及解决方法
在本文中,将介绍一次遇到的.Net分布式事务死锁现象以及解决方法.我们将首先了解事务框架的构成,然后分析导致死锁的代码,最后提出解决方法. 事务框架 本次开发框架JMSFramework将分布式事务划 ...
- 使用C#编写.NET分析器(完结)
译者注 这是在Datadog公司任职的Kevin Gosse大佬使用C#编写.NET分析器的系列文章之一,在国内只有很少很少的人了解和研究.NET分析器,它常被用于APM(应用性能诊断).IDE.诊断 ...
- 使用react-test-renderer/shallow写测试
我的项目是采用react + ts来写的,项目中要写单元测试,于是采用了Jest库, 主要用的package有 react-test-renderer react-test-renderer/sha ...
- 关于DVWA靶场高难度命令执行的代码审计
需要的环境:dvwa 使用的工具:PHP手册 high难度源代码: <?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input $target ...
- boinc使用笔记
安装 yum install -y epel-release yum install -y boinc-client boinc-manager 启动 在图形界面开启终端 boinc boincmgr
- 操作过滤器—MVC中使用操作过滤器实现JWT权限认证
前言 上一篇文章分享了授权过滤器实现JWT进行鉴权,文章链接:授权过滤器-MVC中使用授权过滤器实现JWT权限认证,接下来将用操作过滤器实现昨天的JWT鉴权. 一.什么是操作过滤器? 与授权过滤器 ...
- 《深入理解Java虚拟机》读书笔记:Class类文件的结构
Class类文件的结构 Sun公司以及其他虚拟机提供商发布了许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的的程序存储格式--字节码(ByteCode),从而实现了程序 ...
- 解密Prompt系列13. LLM Agent-指令微调方案: Toolformer & Gorilla
上一章我们介绍了基于Prompt范式的工具调用方案,这一章介绍基于模型微调,支持任意多工具组合调用,复杂调用的方案.多工具调用核心需要解决3个问题,在哪个位置进行工具调用(where), 从众多工具中 ...
- 一文读懂LockSupport
阅读本文前,需要储备的知识点如下,点击链接直接跳转. java线程详解 Java不能操作内存?Unsafe了解一下 LockSupport介绍 搞java开发的基本都知道J.U.C并发包(即java. ...