UVa 11988破损的键盘】的更多相关文章

原题链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3139 题意就是输入文本,若是遇到"["光标就移到最前面,遇到"]"光标就移到最后. 在这段代码中,在for循环中如果不用n来代替strlen(s+1),最后就会超时,以后写代码的时候我会注意到这点. #include<iostream…
这题是很好的学习用数组实现链表的例子. 原题链接 UVa11988 题意 输入一段文本,字符'['表示Home键,']'表示End键.输出屏幕上面的结果. 思路 难点在于在字符串的头和尾插入字符,如果直接利用数组操作,会超时,最好的办法就是利用单向链表. 刘汝佳大哥的代码 #include<cstdio> #include<cstring> const int maxn=100000+5; char str[maxn]; int next[maxn]; int cur,last;…
破损的键盘(悲剧文本)(Broken Keyboard(a.k.a. Beiju Text),Uva 11988) 题意描述 你在输入文章的时候,键盘上的Home键和End键出了问题,会不定时的按下.你却不知道此问题,而是专心致志地打稿子,甚至显示器都没开.当你打开显示器之后,展现你面前的数一段悲剧文本.你的任务是在显示器打开前计算出这段悲剧的文本. 给你一段按键的文本,其中'['表示Home键,']'表示End键,输入结束标志是文件结束符(EOF). 样例输入 This_is_a_[Beiju…
/*数组形式描述链表:链表不一定要用指针. 题目链接:UVa 11988 Broken Keyboard 题目大意: 小明没有开屏幕输入一个字符串,电脑键盘出现了问题会不定时的录入 home end 两个键, 我们知道如果录入home则将光标定位到字符首,如果录入end则是将光标定位到字符尾.现 在让你输出这段坏了文本. 表示:home => '[' , end => ']' 举例: input: hello[_Tom_]! output: _Tom_hello! 解题思路: 数组中频繁移动元…
 题目: 你有一个破损的键盘.键盘上的所有键都可以正常工作,但有时Home键或者End键会自 动按下.你并不知道键盘存在这一问题,而是专心地打稿子,甚至连显示器都没打开.当你 打开显示器之后, 展现在你面前的是一段悲剧的文本.你的任务是在打开显示器之前计算出 这段悲剧文本. 输入包含多组数据.每组数据占一行,包含不超过100000个字母.下划线.字符“[”或 者“]”.其中字符“[”表示Home键, “]”表示End键.输入结束标志为文件结束符(EOF).输 入文件不超过5MB.对于每组数据,输…
https://vjudge.net/problem/UVA-11988 题目 你有一个破损的键盘.键盘上所有的键都可以正常工作,但有时候Home键或者End键会自动按下.你并不知道键盘存在这一问题,而是专心打稿子,甚至连显示器都没打开.当你打开显示器后,展现在你面前的是一段悲剧文本.你的任务是在打开显示器之前计算出这段悲剧文本. 输入包含多组数据.每组数据占一行,包含不超过100000个字母.下划线.字符“[”或者“]”.其中字符“[”表示Home键,“]”表示End键.输入结束标志为文件结束…
题目代号:UVA 11988 题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3139 You’re typing a long text with a broken keyboard. Well it’s not so badly broken. The only problemwith the keyboard is that…
s[] 数组用来保存原有的字符序列 nex[] 数组记录打印的下标顺序 C++11 代码如下: #include<iostream> #include<cstring> using namespace std; #define maxn 100006 char s[maxn]; int nex[maxn], n; int main() { ) { , last = ; nex[] = ; char ch; ; i <=strlen(s + ); i++) { ch = s[i…
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 withthe keyboard is that sometimes the “home” key or the “end” key gets automatically pressed (internally).You’…
题意: 输入一行字符,其中包含'[' 和 ‘]’, 意思为键盘上的home 和 end 键, 然后模拟字符在键盘上输入. 输入一行最终的结果 分析: 用数组模拟一个链表, 在链表的头尾插入字母然后输出即可, 方法需要多加练习才能练熟, 其实跟邻接表有点像. 为了方便起见,常常在链表的第一个元素之前放一个虚拟结点. #include <bits/stdc++.h> using namespace std; + ; int main() { char str[maxl]; int cur, las…
题目描述 Description 有一天,你需要打一份文件,但是你的键盘坏了,上面的"home"键和"end"键会时不时地按下,而你却毫不知情,甚至你都懒得打开显示器,当你打开显示器之后,出现在你的面前的是一段悲剧的文本. 输入描述 Input Description 输入只有一行,即这份文件,这份文件只包含小写字母和'['以及']',用'['代替"home"键,用']'代替"end"键. 输出描述 Output Descri…
你用了一个有点坏掉的键盘打字,该键盘会自动按下”Home”键与“End”键,直到打完整个内容以前,你都没有发现到这个问题.本题给定键盘输出的字串(包含Home与End),请你输出该字串在屏幕显示的内容. Input输入有多组测试数据,每组一列,其长度介于1 ~ 100,000之间,包含小写的字母及两个符号'['与']','['表示Home键(被键盘自动按下),']'表示End键.输入数据以EOF表示结束,其数据长度不超过5MB. Output请你输出该字串在屏幕上显示的内容. Sample In…
因为要经常移动这些字符,所以采用的数据结构是链表. next[i]起到的作用大概就是类似链表里的next指针. 0.需要注意的是,判断cur == last ? 如果 是 则 last=i 1.另外一点是,输入的时候把next[0]空出来,起链表里面空白头结点的作用.所以输入的时候有个小改动 从s+1开始填入字符,计算长度的时候也是从s+1开始计算,s代表的是这个数组的首地址. 2.直接往oj上交的时候要注意,next数组名要改一下 2. )) { ); ...... } #include <i…
题目传送门 题意:训练指南P244 分析:链表模拟,维护链表的head和tail指针 #include <bits/stdc++.h> using namespace std; const int N = 1e5 + 5; struct Link_list { char ch; Link_list *nex; }link_list[N]; int main(void) { while (true) { Link_list *head = link_list; Link_list *q = li…
题目复制太麻烦了,甩个链接 http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18693 直接模拟光标操作时间复杂度较高,所以用链表存储顺序. pos表示光标位置 #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> using namespace st…
题意: 模拟一个文本编辑器,可以输入字母数字下划线,如果遇到'['则认为是Home键,如果是']'则认作End键. 问最终屏幕上显示的结果是什么字符串. 分析: 如果在数组用大量的移动字符必然很耗时.所以next数组表示显示屏中s[i]右边的字符编号,变量cur模拟光标,即当前光标位于s[cur]的右边. 变量last记录显示屏最后一个字符的下标. 我理解的连接的情况应该是这样子的: //#define LOCAL #include <cstdio> #include <cstring&…
一开始不懂啊,什么Home键,什么End键,还以为相当于括号,[]里的东西先打印出来呢.后来果断百度了一下. 悲催啊... 题意:给定一个字符串,内部含有'['和']'光标转移指令,'['代表光标移向文章头,']'代表光标移向文章尾,问最终在屏幕上显示的字符串序列是什么 思路:直接模拟一下即可,不过因为由于会可能移动到字符串开头以及结尾,所以我开了3个char数组. str1存储由于'['的原因而打印在开头的字符,str3存储由于']'的原因打印在结尾的字符,str2则是存储一开始在没遇到'['…
/* 之前一直不重视链表 (好吧说实话主要是看着板子都是指针就怂了T.T) 这道题比较基础 应用了链表的思想 数组模拟指针 遇到的问题就是跑着跑着光标跳到前面或者跳到后面 我们用next储存每个点下一个点在哪 这样我们不仅能往开头和结尾插入 中间任意一个地方都ok. 这题数据范围题目描述小了 0.0 */ #include<iostream> #include<cstdio> #include<cstring> #define maxn 100010 using nam…
刘汝佳的题目,悲剧文本 -_-||| 这里使用vector<string>容器倒置记录数据,然后从后面输出就能够了. 难度就是不知道这种文档究竟哪里是開始输出,故此使用动态管理内存的容器比較好做. 添加了io处理的O(n)算法也没有上榜,郁闷. #include <stdio.h> #include <vector> #include <string> using std::vector; using std::string; const int MAX_B…
两种方法,直接上代码 STL标准模板库 #include <iostream> #include <list> #include <algorithm> #include <cstdio> using namespace std; const maxn=100000+5; char str[maxn]; typedef list<char> L; int main(){ while(gets(str)){ L l; L::iterator p;…
题目链接: https://cn.vjudge.net/problem/UVA-11988 /* 问题 将一段文本经过一定的规则处理后输出,规则就是[表示home键,表示光标跳到行首,]表示end键,表示光标跳到行末 解题思路 可以发现[]是可以嵌套的,采用纯模拟比较复杂,采用类似KMP中的next数组一样,记录一下每个字符的下一个字符位置,最后 输出即可. */ #include<iostream> #include<cstdio> #include<cstring>…
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 iss…
题目描述: 题目思路: 1.使用链表来重新定位各个字符 2.用数组实现链表 3.开一个数组list[i]来存储字符数组下一个字符的位置 #include <iostream> #include <cstring> using namespace std; + ; int last,cur,list[maxn] ; char s[maxn] ; int main(int argc, char *argv[]) { ) == ) { ); last = cur = ; list[] =…
传送门 题目大意:一个字符串,将[]内的字符提前. 题解:链表,数组元素高效交换 cur表示目前元素插入下标为cur的元素后面. 所以,假设目前把下标为i的元素插到cur后面. 那么,next[i]=next[cur],为cur后面的元素成为i后面的元素 next[cur]=i,cur后面的元素就是i了. 如果遇到'[',说明要把后面到'['插到开头了,cur赋值为0, last表示最后输出答案的下标. 如果遇到']',那么cur=last,继续从最后一个元素开始插入. 代码: #include…
使用list来模拟就行了,如果熟悉list,那么这道题真是分分钟秒掉... list是双向循环链表,插入和删除操作非常快,缺点是不能像数组一样随机按下标读取. 一下是wiki上说明的相关函数:http://zh.wikipedia.org/wiki/List_(STL) Iterators: list.begin() 回传指向第一个元素的 Iterator. list.end() 回传指向最末元素的下一个位置的 Iterator. list.rbegin() 回传指向最末个元素的反向 Itera…
题目链接:https://vjudge.net/problem/UVA-11988 题目大意:输入一个字符串,输出在原本应该是怎么样的?  具体方法是 碰到' [ ' 回到最前面  碰到‘ ]’  回到最后面. 思路:很容易可以想到用数组来写,但是仔细分析一下,每次你把一个字符插入到最前面,它后面的字符全都要往后移,那么复杂度是多大呢?  最差的情况,每一个都插在最前面,呢么复杂度是 n*n   肯定超时的.  应用链表则只有n的复杂度了.  这是我接触到的第一道链表题目,说的详细一点: 比如 …
简单题,题目要求显然是很多次插入,所以是链表. 插入两个语句,nxt[i] = nxt[u] 表示 i结点指向u的后继, nxt[u] = i表示把u的后继设成i. 设置一个头结点,指向一个不存在的结点,维护一下最后一个结点tail. #include<bits/stdc++.h> using namespace std; ; int nxt[maxn]; char s[maxn]; int main() { //freopen("in.txt","r"…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 会链表的插入操作的话.这个就不难了. 放置两个哨兵节点. 然后模拟插入一个节点的过程就好. 实时修改光标就好->即下一个插入的位置. [代码] #include <bits/stdc++.h> using namespace std; const int N = 1e5; const int fir = 0, last = N + 10; int nex[N + 100],len,be; char s[N + 100];…
题目链接 维护一个链表,以及当前位置.head.tail的指针,模拟就行了 #include<iostream> #include<cstring> #include<cstdio> using namespace std; char s[100010]; int cnt,head,tail,pos; struct Data{ char c; int nxt; } a[100010]; int main() { while(scanf("%s",s)…
这个构造十分巧妙,,,又学到一招,有点类似数组实现的邻接表 #include <iostream> #include <string.h> #include <cstdio> #include <math.h> #define SIGMA_SIZE 26 #pragma warning ( disable : 4996 ) using namespace std; typedef long long LL; inline int Max(int a,int…