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;
}
完结撒花~