标签:
题目:在一个没有显示器的电脑上输入一个字符串,键盘坏掉了,会随机的出现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 }
标签:
原文地址:http://www.cnblogs.com/daijkstra/p/4446930.html