破损的键盘,紫书P143UVa11988

来源:互联网 发布:我知谁掌管明天 歌曲 编辑:程序博客网 时间:2024/04/29 02:02

这到题刘用双数组模拟构建链表,刚开始理解起来比较费力,
尤其是对程序中“next[i] = next[cur];”这段语句的理解。
等到最后看明白后恍然大悟。对于本题来说,可以说是链表的经典应用。

// UVa11988 Broken Keyboard// Rujia Liu#include<cstdio>#include<cstring>const int maxn = 100000 + 5;int last, cur, next[maxn]; char s[maxn];int main() {  while(scanf("%s", s+1) == 1) {    int n = strlen(s+1);    last = cur = 0;    next[0] = 0;    for(int i = 1; i <= n; i++) {      char ch = s[i];      if(ch == '[') cur = 0;      else if(ch == ']') cur = last;      else {        next[i] = next[cur];        next[cur] = i;        if(cur == last) last = i;        cur = i;                    }    }    for(int i = next[0]; i != 0; i = next[i])      printf("%c", s[i]);    printf("\n");  }  return 0;}
原创粉丝点击