UVA11988 【Broken Keyboard (a.k.a. Beiju Text)】:题解

题目链接:https://www.luogu.org/problemnew/show/UVA11988

这题虽说是和链表有关的模拟,但其实并不是很需要啊,但蒟蒻用了(说的好听是练手,说的难听是太弱),效果海星。

分析:

此题模拟即可,本人估计难度大概提高-,可以直接数组模拟,也可以用链表存储。主要是每组数据有多组输入,所以读入的方法可以多加注意,我的这种方法海星(这么有自信是因为是跟大佬学的),然后灵活运用for语言即可。

其他在代码中说明。

代码:

#include<iostream>  
#include<cstdio>  
#include<cmath>  
using namespace std;  
char s[100005];  
int Next[100005];  
int main()  
{  
    int cur,last;  
    while(~scanf("%s",s+1)) //s+1即读入的s字符串下标从1开始(强迫症患者)
    {  
        cur=last=0;  
        Next[0]=0;//初始化
        for(int i=1;s[i]!='\0';i++)  //中间的判断语句意为没有到字符串的结束标志——\0,说白了就是穷尽整个字符串
        {  
            char QAQ=s[i];  //QAQ
            if(QAQ=='[') cur=0;
            else if(QAQ==']') cur=last;//如果跳到开头了,那就把cur弄成最头上,如果又回来了,那同理到末尾
            else  
            {  
                Next[i]=Next[cur];  
                Next[cur]=i;
                if(last==cur) last=i;  
                cur=i;
            }  //链表存储
        }  
        for(int i=Next[0];i!=0;i=Next[i])  //别致的输出
        {  
            printf("%c",s[i]);  
        }  
        printf("\n");  //换行别忘
    }  
    return 0;  
}  
完结撒花~
posted @ 2018-11-27 20:34  ShineEternal  阅读(140)  评论(0编辑  收藏  举报