uva11988

此处采用的是链表的思想,具体实现过程任然需要注意,知识是死的,而自己的思想是活的,加油,自己
<pre name="code" class="cpp">#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
#define maxn 100005

int cur, last, 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;///光标此时指向的下一个数自然就是s[i],这里表示为在字符串中其位置
                if(cur == last) last=i;
                 cur=i;
            }
        }

        for(int i=next[0]; i!=0; i=next[i])
            cout<<s[i];
        cout<<endl;
    }
    return 0;
}
				
时间: 2024-10-25 16:55:24

uva11988的相关文章

UVa11988 Broken Keyboard(悲剧文本)

UVa11988 Broken Keyboard(悲剧文本) 题目链接:UVa11988 题目描述: 输入包含多组数据,每组数据占一行,包含不超过100000个字母.下划线.字符"["或者"]".其中字符"["表示Home键,"]"表示End键.输入结束标志为文件结束符(EOF)输入文件不超过5MB,对于每组数据,输出一行,即屏幕上的悲剧文本 样例输入: This_is_a_[Beiju]_text [[]][]Happy_B

数组模拟单向链表例题(UVa11988)

指针的链表实现方式是,当前节点的next指向下一个节点,用数组模拟就是 for(int i=next[0];i!=0;i=next[i]) i=next[i]:就是一条链. 例题: 你有一个破损的键盘.键盘上的所有键都可以正常工作,但有时Home键或者End键会自动按下.你并不知道键盘存在这一问题,而是专心打稿子,甚至连显示器都没打开.当你打开显示器时之后,展现在你面前的是一段悲剧文本.你的任务时在打开显示器之前计算出这段悲剧文本. 输入包含多组数据.每组数据占一行,包含不超过100000个字母

UVa11988:Broken Keyboard

Description Broken KeyboardYou're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem with the keyboard is that sometimes the "home" key gets automatically pressed (internally). You're not aware of this iss

UVA11988 Broken Keyboard (a.k.a. Beiju Text)【数组模拟链表】

Broken Keyboard (a.k.a. Beiju Text) You're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem with the keyboard is that sometimes the "home" key or the "end" key gets automatically pressed (inter

UVA-11988 Broken Keyboard (a.k.a. Beiju Text) (链表 或 递归)

题目大意:将一个字符串改变顺序后输出.遇到“[”就将后面内容拿到最前面输出,遇到“]”就将后面的内容拿到最后面输出. 题目分析:用nxt[i]数组表示i后面的字符的下标,实际上就是以字符i为头建立链表,写法类似链式前向星. 代码如下: # include<iostream> # include<cstdio> # include<cstring> # include<algorithm> using namespace std; char p[100005]

UVA11988 Broken Keyboard 链表

题目描述: 你在输入文章的时候,键盘上的Home键和End键出了问题,会不定时的按下. 给你一段按键的文本,其中'['表示Home键,']'表示End键,输出这段悲剧的文本. 解题思路 用顺序结构储存会超时 所以用模拟链表来储存 cur表示光标的位置 last表示当前最后一个字符的编号 next[i]表示s[i]后面的字符的编号 为了方便起见在数组的最前面虚拟一个s[0].代码如下 #include <cstdio> #include <cstring> #include <

6_4 破损的键盘(UVa11988)&lt;链表&gt;

你用了一个有点坏掉的键盘打字,该键盘会自动按下”Home”键与“End”键,直到打完整个内容以前,你都没有发现到这个问题.本题给定键盘输出的字串(包含Home与End),请你输出该字串在屏幕显示的内容. Input输入有多组测试数据,每组一列,其长度介于1 ~ 100,000之间,包含小写的字母及两个符号'['与']','['表示Home键(被键盘自动按下),']'表示End键.输入数据以EOF表示结束,其数据长度不超过5MB. Output请你输出该字串在屏幕上显示的内容. Sample In

UVa11988 Broken Keyboard (a.k.a. Beiju Text) (链表)

链接:http://acm.hust.edu.cn/vjudge/problem/18693分析:链表.用nxt[i]保存s[i]右边字符在s中的下标.增加一个虚拟字符s[0],那么nxt[0]就是显示屏中最左边的字符.cur表示光标位置左边的字符在s数组中的下标,last表示显示屏中最后一个字符在s数组中的下标.其实就是用nxt链表重新组织s数组的输出顺序,输入一个字符,先将新插入字符的nxt[i]指向nxt[cur],再将nxt[cur]指向i,就是在链表元素cur后插入元素i,更新最后一个

Uva11988 Broken Keyboard (a.k.a. Beiju Text)(就是先输出括号的字符)

Description Problem B Broken Keyboard (a.k.a. Beiju Text) You're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem with the keyboard is that sometimes the "home" key or the "end" key gets automa