uva 11988

来源:互联网 发布:日照间距算法 编辑:程序博客网 时间:2024/04/30 18:27

题目概述

你键盘的home键和end键会不定时自动按下而你并不知道,你专心打字甚至连显示器都没开,只有打完一行你才去看一眼,给出你要打的文字和home,end键自动按下的时机,求最后打出来的字

时限

1000ms/2000ms

输入

每行一个字符串,字符串中的[代表home键被按下,]代表end键被按下,输入到EOF为止

限制

1<=字符串长度<=100000;字符串中仅含字母,_,[]

输出

每行一个字符串,为最后打出来的结果

样例输入

This_is_a_[Beiju]_text
[[]][][]Happy_Birthday_to_Tsinghua_University

样例输出

BeijuThis_is_a__text
Happy_Birthday_to_Tsinghua_University

讨论

模拟,无非是考对stl的熟练度,频繁插入,首选list,没什么需要解释的

题解状态

0 KB,190 ms,C++11 4.8.2,674

题解代码

#include<algorithm>#include<cstring>#include<cstdio>#include<list>using namespace std;#define INF 0x3f3f3f3f#define MAXN 32#define memset0(a) memset(a,0,sizeof(a))list<char>type;//存储字符的链表list<char>::iterator it;//控制插入位置的迭代器 俗称光标void fun(){    char c;    it = type.end();//初始时在末尾插入    while (~scanf("%c", &c) && c != '\n') {//input//每行以换行结尾        if (c == '[')            it = type.begin();//遇到home键就将光标移到开头        else if (c == ']')            it = type.end();//遇到end移到最后        else            type.insert(it, c);//插入后光标会自动移到插入字符的后面    }    it = type.begin();    while (it != type.end())        printf("%c", *it++);//output    printf("\n");//output}int main(void){    //freopen("vs_cin.txt", "r", stdin);    //freopen("vs_cout.txt", "w", stdout);    char c;    while (~scanf("%c", &c)) {//input//检查是否还有下一行输入        ungetc(c, stdin);//然后把吞进来的字符退回输入流        fun();        type.clear();//最后需要清空链表    }}

EOF

0 0