UVA 11988 Beiju Text
https://vjudge.net/problem/UVA-11988
题目
你有一个破损的键盘。键盘上所有的键都可以正常工作,但有时候Home键或者End键会自动按下。你并不知道键盘存在这一问题,而是专心打稿子,甚至连显示器都没打开。当你打开显示器后,展现在你面前的是一段悲剧文本。你的任务是在打开显示器之前计算出这段悲剧文本。
输入包含多组数据。每组数据占一行,包含不超过100000个字母、下划线、字符“[”或者“]”。其中字符“[”表示Home键,“]”表示End键。输入结束标志为文件结束符(EOF)。输入文件不超过5MB。对于每组数据,输出一行,即屏幕上的悲剧文本。
样例输入:
This_is_a_[Beiju]_text
[[]][][]Happy_Birthday_to_Tsinghua_University
样例输出:
BeijuThis_is_a_text
Happy_Birthday_to_Tsinghua_University
题解
服了= =
两年前看见这题……看不懂
几个月前看了邓公的数据结构课的链表大概知道是怎么回事了……(“邓俊辉的数据结构,贵系授课质量最好的课”)
个人思路:

写个双向链表……在Start后(需要更新cur)或End处插入元素……
如果在start处还需要记录当前的字符位置:

比如已经输入1和2,将要插入3……
可以定义个node结构体,包含last、next和ch三个元素,然后定义个node数组,直接操作就好了……
但是紫书上告诉我可以用单向链表,不用定义结构体……代码量还很小,不用分别是否在讨论Start和End插入
紫书上的答案:
如果使用单向链表,尝试理解了下书上给的答案

如果使用单向,那么End节点作用就不大,不能用End来找出之前的元素,直接定义为-1……在最后插入仍然需要记录当前的位置(如d)
那么在Start和End处的插入操作可以统一
那么大概就懂了……开始编码
#include<bits/stdc++.h>
using namespace std; #define REP(i,x,y) for(register int i=x; i<y; i++)
#define REPE(i,x,y) for(register int i=x; i<=y; i++) char s[100007];
int nxt[100007];
int lst, cur;
int main() {
while(~scanf("%s", s+1)) {
nxt[0]=-1;
cur=0;
for(int i=1; s[i]; i++) {
if(s[i]=='[') {
lst = cur;
cur = 0;
} else if(s[i]==']') {
cur = lst;
} else {
nxt[i]=nxt[cur];
nxt[cur]=i;
cur=i;
}
}
for(int i=nxt[0]; ~i; i=nxt[i]) {
putchar(s[i]);
}
putchar('\n');
}
return 0;
}
然后就WA了……
看到标程,发现Home键可能不止按下一次……有点悲剧
AC代码:
#include<bits/stdc++.h>
using namespace std; #define REP(i,x,y) for(register int i=x; i<y; i++)
#define REPE(i,x,y) for(register int i=x; i<=y; i++) char s[100007];
int nxt[100007];
int lst, cur;
int main() {
while(~scanf("%s", s+1)) {
nxt[0]=-1;
cur=0, lst=0;
for(int i=1; s[i]; i++) {
if(s[i]=='[') {
cur = 0;
} else if(s[i]==']') {
cur = lst;
} else {
nxt[i]=nxt[cur];
nxt[cur]=i;
if(lst==cur) lst=i;
cur=i;
}
}
for(int i=nxt[0]; ~i; i=nxt[i]) {
putchar(s[i]);
}
putchar('\n');
}
return 0;
}
然后感叹: 刘老爷是真的牛批,邓公的数据结构课是真的毛……
UVA 11988 Beiju Text的更多相关文章
- 破损的键盘(悲剧文本)(Broken Keyboard(a.k.a. Beiju Text),Uva 11988)
破损的键盘(悲剧文本)(Broken Keyboard(a.k.a. Beiju Text),Uva 11988) 题意描述 你在输入文章的时候,键盘上的Home键和End键出了问题,会不定时的按下. ...
- UVA 11988 Broken Keyboard (a.k.a. Beiju Text)(链表)
题目代号:UVA 11988 题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&pa ...
- 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 ...
- 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 ...
- Broken Keyboard (a.k.a. Beiju Text) UVA - 11988
You're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem wi ...
- 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 ...
- UVa 11988 Broken Keyboard(链表->数组实现)
/*数组形式描述链表:链表不一定要用指针. 题目链接:UVa 11988 Broken Keyboard 题目大意: 小明没有开屏幕输入一个字符串,电脑键盘出现了问题会不定时的录入 home end ...
- 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 ...
- 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 ...
随机推荐
- VS2015/Visual Studio快捷键无效问题
0 VS2015快捷键无效问题的解决办法 快捷键的使用可以大大提高编码效率,VS为我们内置了不少的常用快捷键组合,实际使用过程中往往会随着计算机上安装其他软件引起快捷键冲突,导致VS快捷键失效,解决办 ...
- 构建前端gulp自动化
看了很多关于Gulp自动化的相关教程,很感谢大神们的教程, 因为担心自己会忘记啥的,所以就把自己搭建gulp自动化的过程记录下来~~~ gulp是依赖于Nodejs的,所以最好是有点nodejs的基础 ...
- Python全栈开发之路 【第五篇】:Python基础之函数进阶(装饰器、生成器&迭代器)
本节内容 一.名称空间 又名name space,就是存放名字的地方.举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方. 名称空间共3种,分别如下 ...
- windows安装Redis和客户端
一.Windows安装Redis 1.下载安装包Redis-x64-3.0.504.zip到本地 2.解压 3.打开CMD,切换到解压后的redis目录,然后 C:\Users\Administrat ...
- Create a toolwindow for the VBA editor with .NET(C#).
原始出处:http://www.cnblogs.com/Charltsing/p/VBEtoolwindow.html 最近有人问起使用C#在VBE插件中创建toolwindow的事情,由于VBE窗口 ...
- Django 中的Form表单认证
一.Form表单 1.1 Form的几个功能 验证用户数据(显示错误信息) 初始化页面显示内容 HTML Form提交保留上次提交数据 生成HTML标签 1.2 创建表单类Form 1. 创建 ...
- PAT L3-016 二叉搜索树的结构
https://pintia.cn/problem-sets/994805046380707840/problems/994805047903240192 二叉搜索树或者是一棵空树,或者是具有下列性质 ...
- Mysql中的排序规则utf8_unicode_ci、utf8_general_ci总结
Mysql中utf8_general_ci与utf8_unicode_ci有什么区别呢?在编程语言中,通常用unicode对中文字符做处理,防止出现乱码,那么在MySQL里,为什么大家都使用utf8_ ...
- Oracle创建'数据库'三步走
--创建表空间 create tablespace waterboss datafile 'd:\waterboss.dbf' size 100m autoextend on next 10m; -- ...
- mybatis二级缓存详解
1 二级缓存简介 二级缓存是在多个SqlSession在同一个Mapper文件中共享的缓存,它是Mapper级别的,其作用域是Mapper文件中的namespace,默认是不开启的.看如下图: 1. ...