立志用最少的代码做最高效的表达


You’re typing a long text with a broken keyboard. Well it’s not so badly broken. The only problem
with the keyboard is that sometimes the “home” key or the “end” key gets automatically pressed
(internally).

You’re not aware of this issue, since you’re focusing on the text and did not even turn on the
monitor! After you finished typing, you can see a text on the screen (if you turn on the monitor).
In Chinese, we can call it Beiju. Your task is to find the Beiju text.

Input
There are several test cases. Each test case is a single line containing at least one and at most 100,000
letters, underscores and two special characters ‘[’ and ‘]’. ‘[’ means the “Home” key is pressed
internally, and ‘]’ means the “End” key is pressed internally. The input is terminated by end-of-file
(EOF).

Output
For each case, print the Beiju text on the screen.

Sample Input
This_is_a_[Beiju]_text
[[]][][]Happy_Birthday_to_Tsinghua_University

Sample Output
BeijuThis_is_a__text
Happy_Birthday_to_Tsinghua_University


分析

next数组作为存储地址存在。

其中,next[0]可以理解为链表的头结点。

核心代码:

next[i] = next[cur];        //第一步
next[cur] = i;             //第二步
cur = i;                   //第三步

这三行代码可以理解为将一个节点插入的过程。

图示:

如输入: ab[cd]e
则:next[0] = 4; next[1] = 2; next[2] = 6; next[4] = 5; next[5] = 1; next[6] = -1;

最后根据next的地址输出对应的s[i]即可。


附上刘汝佳先生的代码

#include<stdio.h>
#include<string.h>
using namespace std;const int maxn = 100000+5;
int last, cur, next[maxn];      //光标位于cur号字符的后面
char s[maxn];int main() {while(scanf("%s", s+1) == 1) {int n = strlen(s+1);      //从1开始算last = cur = 0;next[0] = 0; for(int i = 1; i <= n; i++) {char ch = s[i];if(ch == '[') cur = 0;else if(ch==']') cur = last;else {next[i] = next[cur];next[cur] = i;if(cur == last) last = i;    //更新“最后一个字符编号” cur = i;    //移动光标 }}for(int i = next[0]; i != 0; i = next[i])printf("%c", s[i]);putchar('\n');}return 0;
}

【刘汝佳代码详解】例题6-4破损的键盘(Broken Keyboard,UVa 11988)相关推荐

  1. 16行代码AC——例题6-4破损的键盘(Broken Keyboard,UVa 11988)——解题报告

    励志用尽量少的代码做高效的表达. 题目(提交)链接→UVa-11988 题目大意: 输入一个字符串,输出在原本应该是怎么样的? 具体方法是: 若读取到'[', 则执行Home键:将光标移到行首. 若读 ...

  2. 【可运行,刘汝佳代码】Trees on the level UVA - 122

    立志用最少的代码做最高效的表达 Trees are fundamental in many branches of computer science (Pun definitely intended) ...

  3. 刘汝佳算法竞赛入门例题-循环部分

    今天是学习acm的第一天,记录一些学习的心得. p34-韩信点兵         简要题干:输入a.b.c,表示军队人数模3,模5,模7的余数                           输出 ...

  4. 算法竞赛入门经典(刘汝佳)——代码笔记

    Reference: <算法竞赛入门经典>(刘汝佳)第一版.第二版 ------------------------------------------------------------ ...

  5. 刘汝佳《算法竞赛入门经典》---总结

    刘汝佳:<算法竞赛入门经典> 三步: 基本的数据结构+算法知识: 数论等数学基本知识: 锻炼联想建模能力.知识与实际相结合,解决实际问题! 第一章:程序设计入门 1.a/b 当a.b为整数 ...

  6. 刘汝佳《算法竞赛入门经典(第二版)》习题(二)

    刘汝佳<算法竞赛入门经典(第二版)>第二章习题 目录 刘汝佳<算法竞赛入门经典(第二版)>第二章习题 习题2-1 水仙花数 习题2-2 韩信点兵 习题2-3 倒三角形 习题2- ...

  7. python的常量和变量_python中的常量和变量代码详解

    局部和全局变量: # name='lhf' # def change_name(): # # global name # name='帅了一比' # print('change_name',name) ...

  8. 刘汝佳紫书 uva1592

    刘汝佳上传的代码没耐心看...就大致照着书上写的思路写了一个...一开始发现全写错了耗了半天... 定义一个pair,这个pair里有存两个队,字符串对和int对.每每读入一行的时候看看map中是否存 ...

  9. [转]ACM-ICPC比赛随想——刘汝佳

    自己接触acm也这么久了,到底我们acmer这般为acm废寝忘食值不值得???个人觉得刘汝佳的这篇文章讲的非常好... 刘汝佳,1982年12月生,毕业于重庆外国语学校,清华大学计算机科学与技术系20 ...

最新文章

  1. string之substring的用法
  2. workerman在linux上怎么运行,linux系统中workerman的安装步骤
  3. WinPcap过滤串表达式的语法
  4. 关于Arrays类中toArray方法的总结
  5. mysql周报内容范文_Mysql各种表格查询含实例,日报,周报,月报,时间差自动计算...
  6. 30岁学python全栈_知乎热帖!戳痛100万程序员:我30岁了,我还能学Python吗?
  7. 最简单OGG配置方式
  8. JS:ES6-7 迭代器与生成器
  9. Shell脚步学习指南提点
  10. cvpr2020 人脸检测与识别_Python人脸检测识别实例教程
  11. STM32库中自定义的数据类型
  12. 【LeetCode】【字符串】题号:412. Fizz Buzz
  13. “你写公众号有啥用啊?还没我摊煎饼赚得多呢!”
  14. 川大计算机学院周激流,周激流(电子信息学院)老师 - 四川大学 - 院校大全
  15. win10触摸板双指单击不能唤出右键菜单
  16. 截部分陈宏对用线段树解矩形并的轮廓(picture 问题的深入讨论)
  17. 【报告分享】汽车数字营销新度量衡-懂车帝(附下载)
  18. 互联网日报 | 3月9日 星期二 | 我国将修改反垄断法;BOSS直聘职场性别差异报告,城镇就业女性的平均薪酬为6847元...
  19. 【力扣刷题】剑指 Offer 40. 最小的k个数(大顶堆)
  20. PTA:寻找孪生素数

热门文章

  1. C++ STL : 模拟实现STL中的关联式容器map和set
  2. 计算机专业有什么血泪建议吗?
  3. 记一次在LAMP中遇到的问题
  4. LiveVideoStack主编观察03 /大会见闻思考
  5. Netflix选择AVIF作为下一代图片压缩技术
  6. 两雄争霸:解读MSU2019年度视频编码大赛
  7. LiveVideoStack线上分享第三季(十二):复杂网络下多码率视频流切换关键技术...
  8. 通过WebAssembly在移动端解码H.265
  9. 高可用架构设计之道,实战案例直面流量洪峰
  10. 嘿,你有没有发现我今天有什么不同?