UVa11988悲剧文本、破损的键盘、链表

题目如下:

大体意思就是,用键盘敲字,碰到 “[” 符号就从第一位开始敲,如果碰到 “]” 符号就从最后一位开始敲。上面?题目里有例子。

下面是我用c语言实现的代码(静态数组):

 

#include <stdio.h>

#define maxn 100000+10

int cur,last;//cur表示当前从哪一个位置开始敲,last表示最后一位所在的位置
int next[maxn];//每个字的下一位在什么地方
char text[maxn];//存储输入的字符串

int main(){
    while(scanf("%s",text+1) == 1){//把0空出来,做头
        cur = last = next[0] = 0;//初始化变量
        int i;
        for(i = 1;text[i];i++){
            if(text[i] == '[') cur = 0;//碰到 [ 就跳到前面
            else if(text[i] == ']') cur = last;//碰到 ] 就跳到后面
            else{
                next[i] = next[cur];//相当于链表插入元素
                next[cur] = i;
                if(cur == last) last = i;//更新最后一位
                cur = i;//更新当前位
            }
        }
        for(i = next[0]; i ;i = next[i])//从第一位开始遍历
            printf("%c",text[i]);
        printf("\n");
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章