UVa-11988 Broken Keyboard (a.k.a. Beiju Text)

来源:互联网 发布:淘宝自动下架 编辑:程序博客网 时间:2024/06/06 00:44
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn =1e5 + 5;int last, cur, Next[maxn];char s[maxn];int main(){    while(~scanf("%s", s + 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;            }//            printf("i = %d (s[%d] = %c): \n", i, i, s[i]);//            printf("cur = %d , last = %d\n", cur, last);//            for(int i = 0; i <= n; i ++)//                printf("Next[%d] = %d\n", i, Next[i]);//            cout << endl;        }        for(int i = Next[0]; i != 0; i = Next[i])            printf("%c", s[i]);        printf("\n");    }    return 0;}

题意:
就是一个破损的键盘敲着敲着会不定时地自动按End(光标移至末尾)或者Home(光标移至开头)。输出最后的文本。[表示Home键。]表示End键。
题解:
还是没有弄明白如何用数组来弄链表,不过还是有点收获吧。注释的东西可以反映整个Next的变化过程,从中体会下。

0 0
原创粉丝点击