UVa-11988(数组模拟链表)
来源:互联网 发布:c语言线程同算法 编辑:程序博客网 时间:2024/06/16 00:42
题目大意:你在输入文章的时候,键盘上的Home键和End键出了问题,会不定时的按下。给你一段按键的文本,其中'['表示Home键,']'表示End键,输出这段悲剧的文本。
如:abc[de]f 则输出deabcf
分析:用next[k]来表示k的下一个字符的序号,cur表示当前字符序号,last表示最后一个字符序号。下面一步步来讲解怎么做
首先,为了方便起见,输入的字符串从s+1开始,即s[1]是第一个字符,且开始时,next[0]=0;
拿例子来说一下过程:
a b c [ d e ] f
0 1 2 3 4 5 6 7 8
i=1: next[1]=next[0]=0 ; next[0]=1 (此时0->1) last=1; cur=1
i=2: next[2]=next[0]=0 ; next[1]=2 (此时0->1->2) last=2; cur=2
i=3: next[3]=next[2]=0 ; next[2]=3 (此时0->1->2>3) last=3; cur=3
i=4: cur=0
i=5: next[5]=next[0]=1 ; next[0]=5 (此时0->5->1->2->3) last=3; cur=5
i=6: next[6]=next[5]=1 ; next[5]=6 (此时0->5->6->1->2->3) last=3; cur=6
i=7: cur=last=3
i=8: next[8]=next[3]=0 ; next[3]=8 (此时0->5->6->1->2->3->8) last=8; cur=8
在不是插入情况下(即i=1,2,3)时,每次处理i都先使next[i] = next[cur],这里是让next[i]为0,因为后面还没有数,然后next[cur] = i,是为了连接cur->i 这种情况下,要更新last和cur
在插入情况下(即i=5,6)时,cur变为0,可以理解为头节点,因为要在0和1之间插入5,相当于在头节点和第一个节点之间插入,这一步与链表的插入操作类似,即
next[5]=next[0],next[0]=5, i=6时同理
当出现]时,cur又变回last,再继续处理下一个字符时,因为之前next[last]一直都是为0(这时last=cur),所以又回到了不是插入情况下,next[i]=next[cur]=0,next[cur]=i
输出就从next[0]开始,然后i=next[i],一直到i=0,就说明这是最后一个字符
#include<cstring>#include<iostream>#define MAX 100005using namespace std;int main(){char s[MAX];int next[MAX];//在vj上提交next不能定义为全局数组,不然居然会编译错误while(~scanf("%s", s+1)){//如果把~去掉居然会超时int cur = 0, last = 0;next[0] = 0;int n = strlen(s+1);for(int i = 1; i<=n; i++){if(s[i] == '[') cur = 0;else if(s[i] == ']') cur = last;else{next[i] = next[cur];next[cur] = i;if(last == cur) last = i;cur = i;}}for(int i = next[0]; i!=0; i = next[i]){printf("%c", s[i]);}printf("\n");}return 0;}
- UVa 11988 数组模拟链表
- UVa-11988(数组模拟链表)
- 【数组模拟链表】UVA
- UVa - 11988 Broken Keyboard(数组模拟链表)
- 【数组模拟链表(双向)】UVA
- UVA 11988 Broken Keyboard (a.k.a. Beiju Text)【数组模拟链表】
- UVa 11988 Broken Keyboard (a.k.a. Beiju Text) 数组模拟单向链表
- UVA 11988 Broken Keyboard (a.k.a. Beiju Text)(数组模拟链表)
- 紫书章六例题四 悲剧文本 UVA 11988 (用数组模拟单向链表/递归)
- UVa 11988 Broken Keyboard(模拟链表)
- uva--10050+链表模拟
- UVA 12657 链表模拟
- 数组模拟链表
- 数组模拟链表
- UVa 12657 Boxes in a Line 数组模拟双向循环链表
- 紫书章六例题五 移动盒子 UVA 12657 (数组模拟双向链表)
- UVa 227 Puzzle 【数组和字符串】【模拟】
- UVA-133 双向链表模拟题
- java学习随笔
- TensorFlow 智能机器人原理与实现
- 接下来做的几个案例
- HDU 3038How Many Answers Are Wrong
- ubuntu16 sublime install
- UVa-11988(数组模拟链表)
- CGI的环境变量(env)
- python爬虫数据保存到本地各种格式的方法
- SHH could not initialize proxy
- SQL之删除重复数据
- Hello Kotlin
- Android常用开源项目(四十三)
- 刘安和兄弟连不是骗子吗,手法如此传销,培训机构竟利用网络营销上市的公司
- 安卓中怎么设置TextView让文字适应屏幕,屏幕大了文字大小不变化,但是得好看一点,下面截图就是我写的,,还有就是我已经设置宽高都是wrap_content了还是不成,希望大神们出主意,感激不尽