即将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)的更多相关文章

  1. 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 ...

  2. 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 ...

  3. 破损的键盘(悲剧文本)(Broken Keyboard(a.k.a. Beiju Text),Uva 11988)

    破损的键盘(悲剧文本)(Broken Keyboard(a.k.a. Beiju Text),Uva 11988) 题意描述 你在输入文章的时候,键盘上的Home键和End键出了问题,会不定时的按下. ...

  4. 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:% ...

  5. 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 ...

  6. 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 ...

  7. 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 ...

  8. 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 ...

  9. UVA 11988 Broken Keyboard (a.k.a. Beiju Text)(链表)

    题目代号:UVA 11988 题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&pa ...

随机推荐

  1. 【html】 两栏对比网页,同时滚动

    有的时候需要左右对比环境,而且希望能同时滚动,如下这么拼接就可以了 <html> <head><meta http-equiv="content-type&qu ...

  2. vue动态组件 互相之间传输数据 和指令的定义

    地址:https://blog.csdn.net/zhanghuanhuan1/article/details/77882595 地址:https://www.cnblogs.com/xiaohuoc ...

  3. 如何通过HTTP API 调取tushare的股票数据

    长久以来,Tushare一直以固定的Python SDK方式为大家提供数据服务. 虽然在基于Python的数据分析和Python的量化策略开发很方便,但习惯用其他语言的同学们表示了“抗议”,于是在Tu ...

  4. Workbox使用策略

    1.什么是Workbox Strategies? 当service workers 首次被引入时,可以设定一组常见的缓存策略. 缓存策略是一种模式,用于确定service workers 在收到fet ...

  5. [fw]Linux 的 time 指令

    Linux 的 time 指令   Linux 有個很有意思的 time 指令,可以用來查看另一個指令的執行時間,例如執行 time helloworld 會顯示 helloworld 這支程式的執行 ...

  6. release操作流程

    1.release:prepare 这条命令主要是做打包前的准备. 输入对应的release需要打包的版本等信息,如果不输入有默认的内容 将需要记录和准备的内容缓存到pom.xml目录下的releas ...

  7. Spring学习笔记(14)——注解零配置

    我们在以前学习  Spring  的时候,其所有的配置信息都写在  applicationContext.xml  里,大致示例如下: java代码: <beans> <bean n ...

  8. HTML 使用CSS 如何去掉文本聚焦框 HTML 使用CSS 如何去掉文本聚焦框 : outline 值设为none 修改input、textarea输入框placeholder样式

    HTML 使用CSS 如何去掉文本聚焦框 : outline 值设为none 修改input.textarea输入框placeholder样式  兼容性代码: input::-webkit-input ...

  9. iview table的render()函数的用法

    语法:render:(h,params)=>{} render:(h,params) => { return h(" 定义的元素 ",{ 元素的性质 }," ...

  10. ActiveMQ安装步骤及介绍

    1.什么是ActiveMQ? ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMS Provider实现. JMS相关概念 提供者:实现JMS规范的消息中间件服务器 客户端:发送或接 ...