#6. zyy的奇妙输出缓冲区

内存限制:16 MiB 时间限制:200 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: zyy

题目描述

zyy想随心所欲地输出一些字符串,可是他的操作系统觉得太荒唐了,不想帮他输出。ta只好用奇怪的字母语言(就叫吧)告诉傻呆呆的电脑,他想怎么输出这几条字符串。

字符输出的流程如下:首先字符需要被“机械臂1”搬运到输出缓冲区中,再排队由“机械臂2”搬运到屏幕上。由于字符串有很多,并且zyy很任性,所以ta可以自由要求机械臂1从哪个字符串搬运字符到缓冲区里。但是因为两台机械臂都太蒟蒻了,一个周期只能各搬运1个字符。

每周期也只能传送一个操作指令,它的语法如下:

指令字符 操作 解释
+ 切换字符串 让机械臂1从本周期开始搬运下一个字符串的字符,如果到最后一个字符串了那么回到第一个字符串
! 开启输出模式 从本周期开始,启动机械臂2,开始向屏幕搬运字符
? 关闭输出模式 从本周期开始,关闭机械臂2,停止向屏幕搬运字符
p 开放字符缓冲区 从本周期开始,启动机械臂1,开始向缓冲区放入字符
s 关闭字符缓冲区 从本周期开始,关闭机械臂1,停止向缓冲区放入字符
- 保持现状 保持现状,本周期没有其他操作。

程序开始时机械臂1、2处于关闭状态,机械臂1默认对准第一个输入的字符串。

当某个字符串输出完毕时,机械臂1停止工作,开始摸鱼,直到使用+指令把它切换到下一个没输出完字符的字符串。注意跳转之后,机械臂1指向的字符是该字符串尚未被输出的第一个字符。使用+指令切换字符串时无需跳过已经输出完毕的字符串。

机械臂2很懒,它会在上述指令的前提下,在这个周期的最开始就判断需不需要搬运(缓冲区有没有字符),从而早点摸鱼。

当到达最后一个周期时(周期数和指令字符数量一致),输出#表示输出结束。

输入格式

第1行,输入N,表示字符串的个数;

第2-N+1行,输入N个字符串(不含空格);

第N+2行,输入操作指令。

输出格式

按要求输出的字符串,以#结尾(样栗图中的Output:无需输出)。

样例

样例输入

4
I_hate_April.
love_is_a_magical_mystery
you_are_my_sunshine
study_math_is_so_boring
p-+--!s++p------?--

样例输出

I_lovestudy#

样例解释

Step 1 - 机械臂1对准字符串1的'I',`Buflang`指令为'p',开启字符缓冲区。执行完毕后,控制台无输出,缓冲区内容'I'
Step 2 - 机械臂1对准字符串1的'_',`Buflang`指令为'-'。执行完毕后,控制台无输出,缓冲区内容'I_'
Step 3 - `Buflang`指令为'+',机械臂1对准字符串2的'l'。执行完毕后,控制台无输出,缓冲区内容'I_l'
Step 4 - `Buflang`指令为'-',机械臂1对准字符串2的'o'。执行完毕后,控制台无输出,缓冲区内容'I_lo'
Step 5 - `Buflang`指令为'-',机械臂1对准字符串2的'v'。执行完毕后,控制台无输出,缓冲区内容'I_lov'
Step 6 - `Buflang`指令为'!',开启输出模式。执行完毕后,控制台输出'I',缓冲区内容'_love'
Step 7 - `Buflang`指令为's',关闭字符缓冲区。执行完毕后,控制台输出'I_',缓冲区内容'love'
Step 8 - `Buflang`指令为'+',机械臂1对准字符串3的'y'。执行完毕后,控制台输出'I_l',缓冲区内容'ove'
Step 9 - `Buflang`指令为'+',机械臂1对准字符串4的's'。执行完毕后,控制台输出'I_lo',缓冲区内容've'
Step 10 - `Buflang`指令为'p',机械臂1对准字符串4的's'。执行完毕后,控制台输出'I_lov',缓冲区内容'es'
...

数据范围与提示

字符串个数,字符串字符个数控制串长度,输出缓冲区大小(保证缓冲区不会溢出)。

题解来喽:https://bhpan.buaa.edu.cn:443/link/BA97635FB7032D4078BA0FA42357F471

通告标题

通告内容

已知晓