算法竞赛入门经典第二部分基础篇

第6章数据结构和基础

1、UVA11988 Broken Keyboard(破损的键盘)https://vjudge.net/problem/UVA-11988#author=pangda

指针的链表实现方式是,当前节点的next指向下一个节点,用数组模拟就是 for(int i=next[0];i!=0;i=next[i]) i=next[i];就是一条链。

你有一个破损的键盘。键盘上的所有键都可以正常工作,但有时Home键或者End键会自动按下。你并不知道键盘存在这一问题,而是专心打稿子,甚至连显示器都没打开。当你打开显示器时之后,展现在你面前的是一段悲剧文本。你的任务时在打开显示器之前计算出这段悲剧文本。

输入包含多组数据。每组数据占一行,包含不超过100000个字母,下划线,字符"["或者"]"。其中"["表示HOME,"]"表示END键。输入结束标志为文件结束符(EOF)。

Sample Input

This_is_a_[Sample]_text
[[]][][]Nihao_I_am_a_Sample_Input
This_pr[oblem_has_a_100]0[m]s_time_limit
Maybe_theres_no_bracket

Sample Output

SampleThis_is_a__text
Nihao_I_am_a_Sample_Input
moblem_has_a_100This_pr0s_time_limit
Maybe_theres_no_bracket

以这个输入为例。

ABC[DE]F

首先在ABC的时候,是按顺序链接的 0->1->2->3 当遇到'['时,cur=0;所以 next[5]=next[0]; next[0]=5;这样  顺序就变成了 0->5->1->2->3; 然后到E这个字符,同样 next[6]=next[5];next[5]=6; 这样 顺序变成了 0->5->6->1->2->3; 然后到']' 这时候 cur=last=3; 然后到了F; next[9]=next[3]; next[3]=9; 这样 最后的顺序为 0->5->6->1->2->3->9; 这也是最后的打印顺序,注意 开头的0只是个开始,对应指针表示里的头指针,它本身不代表任何字符 因为s[0]不代表字符,s是从1开始的有字符。当然,与链表一样 这个0可以有,没有也行,如果不从0开头 就需要设next[1]=0;然后,最后单独打印s[1];

核心就是 next[i]=next[cur]相当于指针创建中的 p->next=*L->next;(一个是让next[i]=0,一个是让p->next=NULL) next[cur]=i 相当于指针创建中的 *L->next=p;(一个让cur->i 一个让L的next->p)

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=100005;
int last,cur,next1[maxn];//最好不用next
char s[maxn];
int main()
{
    while(scanf("%s",s+1)!=EOF)
    {
        int n=strlen(s+1);//输入保存在s[1],s[2] ...中
        last=0;
        cur=0;
        next1[0]=0;
        for(int i=1;i<=n;i++)
        {
            char ch=s[i];
            if(ch=='[')
                cur=0;
            else if(ch==']')
                cur=last;
            else
            {
                next1[i]=next1[cur];
                next1[cur]=i;
                if(cur==last)
                    last=i;//更新“最后一个字符”编号
                cur=i;//移动光标
            }
        }
        for(int i=next1[0];i!=0;i=next1[i])
          cout<<s[i];
          cout<<endl;
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/zlppassion/article/details/83473195