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] + ( ...
随机推荐
- JavaCV人脸识别三部曲之一:视频中的人脸保存为图片
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于人脸识别 本文是<JavaCV人脸识别三部曲 ...
- ABP - 本地事件总线
1. 事件总线 在我们的一个应用中,经常会出现一个逻辑执行之后要跟随执行另一个逻辑的情况,例如一个用户创建了后续还需要发送邮件进行通知,或者需要初始化相应的权限等.面对这样的情况,我们当然可以顺序进行 ...
- 【技术积累】Mysql中的SQL语言【技术篇】【一】
数据库管理操作 创建一个新的数据库 要在MySQL中创建一个新的数据库,可以使用CREATE DATABASE语句.以下是创建新数据库的SQL语句及其解释: SQL语句: CREATE DATABAS ...
- Html转换PDF(Java实用版)
前言: 在工作当中,遇到了需要把HTML页面转化为PDF文档,有很多中实现,如下进行一个对比,大家个借鉴去进行使用 各实现对比表 于Windows平台进行测试: 此博客仅基于IText和基于WKHtm ...
- VuePress@next 使用数学公式插件
VuePress@next 使用数学公式插件 搞了一个VuePress1.0的 现在升级了一下,但是使用数学公式的插件老报错啊!经过不懈努力,终于搞定了.现在记录一下. VuePress 介绍 Vue ...
- SpringBoot 启动流程分析(寻找扩展点)
1.SpringBoot maven 依赖版本 <?xml version="1.0" encoding="UTF-8"?> <project ...
- zabbix6.4 邮件告警配置
1.注意事项 QQ邮箱不支持zabbix6以上邮件配置,报拒绝登录 建议使用163.com网易邮箱地址 2.添加媒介 创建媒介类型-> 3.添加用户 一般情况下,无需创建用户,编辑admin即可 ...
- 最全linux基础知识
linux基础知识 [root@localhost ~]# 各位置表示什么意识 root:表示用户名 (现在的用户是root切换为test便是张三) localhost:表示主机名 (当前主机名切换为 ...
- 原来TypeScript中的接口和泛型这么好理解
"接口"和"泛型"是 TypeScript 相比于 JavaScript 新增的内容,都用于定义数据类型 前面两篇文章总结了TypeScript中的 类型注解. ...
- nginx搭建静态文件下载服务器
配置文件大致内容 server { # 监听8001端口 listen 8001; server_name 192.168.0.2; # 指定使用utf8的编码 charset utf-8; # 内容 ...