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] + ( ...
随机推荐
- 逍遥自在学C语言 | 函数初级到高级解析
前言 函数是C语言中的基本构建块之一,它允许我们将代码组织成可重用.模块化的单元. 本文将逐步介绍C语言函数的基础概念.参数传递.返回值.递归以及内联函数和匿名函数. 一.人物简介 第一位闪亮登场,有 ...
- Mysql基础篇(一)之DDL、DML、DQL、DCL
一. SQL语句分类 SQL语句,根据其功能,主要分为四类:DDL.DML.DQL.DCL. 分类 全称 说明 DDL Data Definition Language 数据定义语言,用来定义数据对象 ...
- 推荐一款.NET开源的轻量级分布式服务框架
前言 今天要给大家推荐一款由新生命开发团队开源的.NET轻量级分布式服务框架:星尘分布式平台(NewLife.Stardust). 项目介绍 星尘是一个轻量级分布式服务框架.它的功能包含配置中心.集群 ...
- pandas 格式化日期
output_data["ShipDate"] = output_data["ShipDate"].dt.strftime("%Y/%m/%d&quo ...
- sudo提权操作
sudo提权操作 sudo sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等.这样不仅减少了root用户的登录 ...
- [nginx]编译安装openresty
前言 OpenResty是一个基于Nginx和Lua的高性能Web平台,其内部集成了大量精良的Lua库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极高的动态 Web 应用.W ...
- 微软面向企业的Private ChatGPT 参考应用 Chat Copilot
这两天你可能看过这篇文章:微软面向企业的Private ChatGPT 开源!超详细安装流程反馈![1], 这篇文章顶多就是一个Azure OpenAI 服务的简单Demo, 就连插件机制都没有,这也 ...
- 一文读懂LockSupport
阅读本文前,需要储备的知识点如下,点击链接直接跳转. java线程详解 Java不能操作内存?Unsafe了解一下 LockSupport介绍 搞java开发的基本都知道J.U.C并发包(即java. ...
- 【HCDG城市行东莞站】松山湖开发者村助力企业释放数字新动能
本文分享自华为云社区<[HCDG城市行东莞站]从"数据治理"洞察"数字化运营之道",松山湖开发者村助力企业释放数字新动能!>,作者:华为云社区精选. ...
- Inno SetUp安装包:如何在程序安装时卸载驱动程序
pnputil命令行方式卸载 如果您想通过命令行卸载.INF文件的驱动程序,您需要使用PnPUtil命令.以下是一个示例: pnputil /delete-driver oem0.inf /unins ...