码迷,mamicode.com
首页 > 编程语言 > 详细

UVa 11988 数组模拟链表

时间:2015-04-22 13:46:23      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

题目:在一个没有显示器的电脑上输入一个字符串,键盘坏掉了,会随机的出现home,和end按键,

        字符串中‘[‘代表home键(句首),‘]‘代表end键(句尾),问最后输出的字符串的格式。

分析:模拟屏幕操作,移动光标,模拟缓冲区输出操作。

说明:数组模拟链表操作,跟随链表操作,形象化模拟。

 1 // UVa11988 Broken Keyboard
 2 // Rujia Liu
 3 #include<cstdio>
 4 #include<cstring>
 5 const int maxn = 100000 + 5;
 6 int last, cur, next[maxn]; // 光标位于cur号字符之后面
 7 char s[maxn];
 8 
 9 int main() {
10   while(scanf("%s", s+1) == 1) {
11     int n = strlen(s+1); // 输入保存在s[1], s[2]...中
12     last = cur = 0;
13     next[0] = 0;
14 
15     for(int i = 1; i <= n; i++) {
16       char ch = s[i];
17       if(ch == [) cur = 0;
18       else if(ch == ]) cur = last;
19       else {
20         next[i] = next[cur];
21         next[cur] = i;
22         if(cur == last) last = i; // 更新“最后一个字符”编号
23         cur = i; // 移动光标
24       }
25     }
26     for(int i = next[0]; i != 0; i = next[i])
27       printf("%c", s[i]);
28     printf("\n");
29   }
30   return 0;
31 }

 

UVa 11988 数组模拟链表

标签:

原文地址:http://www.cnblogs.com/daijkstra/p/4446930.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!