UVA11988_Broken Keyboard (a.k.a. Beiju Text)
即将dfs()放到打印本段字符的后面
不过汝佳书上面说是用链表写的,无意中用递归写出来了,而且写的挺简单的,代码不复杂,写这个博客主要是想记住递归这种神奇的方法
平时递归搜索时候,dfs()的在其他代码的前后不同会有不同的效果,还有就是在递归前标记某一个,递归后消除这个标记(最经典的是暴力枚举排序)
在递归中也会经常遇到边递归边打印或者是全部递归之后再打印,这些各有不同
而这道题目就充分利用这个特点:递归强行的将一个代码片段或一个操作的执行顺序改变
这个题目其实不难,大概意思就是按了一个[ 就在插入到最前面开始写, 遇到一个]就插入到最后写 :[移动光标到最前面 ] 移动光标到最后面
这样的话模拟一下,就会发现操作具有后效性
在前面的 [ 或者 ] 并不表示最前或者是最后 , 但如果从后面读入操作的话, 比如:
This_is_a_[Beiju]_text
最后一个 ] 所接的字符一定是放在最后打印的, 那么我们现在假设"
_text"最后这一段已经打印好了放在最后面了, (不会因为前面的操作而改变:后效性)
那么现在打印剩下的字符 "This_is_a_[Beiju"
.那么如何保证剩下的字符一定在打印好的字符前面呢????
只要把打印剩下字符的代码放到 前面就好. 便是将dfs()放到打印"_text"的前面
同理: 遇到 [ 怎么办呢??要确保[之后的字符一定在剩余字符的最前面 :
("Beiju" 一定要在剩余字符"This_is_a_["的前面)
只要把dfs()放到打印"This_is_a_" 的前面就可以了,就这样一直下去直到打印结束
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<queue>
#include<cstdlib>
#include<algorithm>
#include<stack>
#include<map>
#include<queue>
using namespace std;
string ss;
void print(int s,int e){
for(int i=s;i<=e;i++) printf("%c",ss[i]);
}
void dfs(int y){
for(int i=y;i>=0;i--){
if(ss[i]=='['){
print(i+1,y); //遇到[向前的 那就先把i+1到y的片段打印出来,再去打印0~i-1的
dfs(i-1); //这样字符段的字符段i+1~y的,在一个可打印区间的最前面
break; //"可打印区间"想说的是在这个片段之前可能已经有递归前打印好放在了前面
}
else if(ss[i]==']'){
dfs(i-1);
print(i+1,y);
break;
}
if(i==0) print(0,y);
}
}
int main(){
while(getline(cin,ss)){
dfs((int)(ss.size()-1));
cout<<endl;
}
return 0;
}
UVA11988_Broken Keyboard (a.k.a. Beiju Text)的更多相关文章
- B - Broken Keyboard (a.k.a. Beiju Text)
Problem B Broken Keyboard (a.k.a. Beiju Text) You're typing a long text with a broken keyboard. Well ...
- uva - Broken Keyboard (a.k.a. Beiju Text)(链表)
11988 - Broken Keyboard (a.k.a. Beiju Text) You’re typing a long text with a broken keyboard. Well i ...
- 破损的键盘(悲剧文本)(Broken Keyboard(a.k.a. Beiju Text),Uva 11988)
破损的键盘(悲剧文本)(Broken Keyboard(a.k.a. Beiju Text),Uva 11988) 题意描述 你在输入文章的时候,键盘上的Home键和End键出了问题,会不定时的按下. ...
- N - Broken Keyboard (a.k.a. Beiju Text)(DFS,链表)
N - Broken Keyboard (a.k.a. Beiju Text) Time Limit:1000MS Memory Limit:0KB 64bit IO Format:% ...
- UVA——11988 Broken Keyboard (a.k.a. Beiju Text)
11988 Broken Keyboard (a.k.a. Beiju Text)You’re typing a long text with a broken keyboard. Well it’s ...
- Broken Keyboard (a.k.a. Beiju Text) 思路
问题:You’re typing a long text with a broken keyboard. Well it’s not so badly broken. The only problem ...
- B - Broken Keyboard (a.k.a. Beiju Text) 数组模拟链表
You're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem wi ...
- UVa 11988 Broken Keyboard (a.k.a. Beiju Text)(链表)
You're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem wi ...
- UVA 11988 Broken Keyboard (a.k.a. Beiju Text)(链表)
题目代号:UVA 11988 题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&pa ...
随机推荐
- 《单词的减法》state1~state17(第一遍学习记录)
单词的减法 2016.05.18 state 1 accordingly 因此,相应地,对应地 advisory 顾问的,劝告的 annoy 打扰,干扰,使恼怒 anticipate/particip ...
- Html5 学习笔记 【PC固定布局】 实战3 热门旅游展示区
最终效果图: html 代码: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta char ...
- Infinity、-Infinity和NaN
首先看看这三个代表什么: Infinity:正无穷大 -Infinity:负无穷大 NaN:Not a Number 当float或double类型的数除零时, 当被除数为非零值时,结果为无穷大 当被 ...
- cesium加载gltf模型
cesium加载gltf模型 一.采用vue-cesium:在项目里加载依赖包.命令如下: npm i --save vue-cesium 在main.js中加入如下代码: https://www.n ...
- [CF1202B] You Are Given a Decimal String(最短路)
Description 今天突然想来发一篇博客防死 [Portal][https://vjudge.net/problem/2650668/origin] 定义被x-y生成器生成的序列为, 一开始有一 ...
- CSS深入理解line-height
1.line-height高度基于基线 2. 3.p元素的高度由行高决定的 4. 5.
- 爬虫-ajax请求遇到Unicode编码问题
2018-08--4爬取金色财经网页 网址:https://www.jinse.com/search/EOS 第一步:我观察了网页:发现了网页是一个发送ajax请求的网页,发现如下: 然后 我就先爬取 ...
- rabbitmq-5-案例2-简单的案例+exchange
Exchange交换机: sendMessage端,发送消息到Exchage1.2, 然后交换机通过路由键,将消息转发给队列queue中,最后客户端从队列中获取消息 交换属性: name:名称 typ ...
- MVC的实体模型写在类库,为什么被其他类库调用时,用不了模型的表?
一,很简单,由于第一次添加实体模型时,VS会自动帮你添加引用System.Data.Entity到当前类库,如下图示: 二,而手动添加的类库并不存在这个引用,则及时你引用了当前的实体模型的类库,却使用 ...
- koa2入门笔记
[TOC] 一 什么是koa koa是基于nodejs的web框架, 是一个中间件框架. 二 中间件 Koa 中间件是简单的函数,它是带有 (ctx, next)形参 的函数. 可以采用两种不同的方法 ...