QOJ.ac

QOJ

Limite de temps : 0.2 s Limite de mémoire : 64 MB Points totaux : 100

#1470. 签名消息格式化

Statistiques

《交通信息标记语言》(MULTI)描述了用于公路动态信息显示屏的消息。一个 MULTI 字符串由要显示的文本以及描述文本格式和包含动态元素的嵌入式标签组成。标签以左括号([)字符开头,以右括号(])字符结尾。如果文本中需要出现左括号字符,则用两个左括号字符表示。同样,如果文本中需要出现右括号字符,则用两个右括号字符表示。本题关注的是字符单元显示屏的格式化,显示屏是由字符单元组成的矩形阵列,每个单元可以显示一个字符。

本题需要支持的标签如下:

标签 描述
[nl] 开始数组的新行
[sc<digit>] 在后续字符串的每对文本字符之间插入 <digit> 个空白字符单元,直到设置改变为止
[/sc] 将字符间距设置为零(等同于 [sc0]
[jl2] 设置左对齐文本(文本的第一个字符位于该行的最左侧)
[jl3] 设置居中对齐文本(行中字符前后的位置数量相同,或者后面的数量比前面的多一个)
[jl4] 设置右对齐文本(字符串的最后一个字符位于该行的最右侧)
[jl5] 设置两端对齐文本(在文本的每对字符之间放置尽可能多的等量空白字符单元,以填满行长;生成的字符串像居中对齐一样在行中居中)

标签内的字母不区分大小写。即 [nl] = [NL] = [Nl] = [nL]

消息开头的默认对齐方式为左对齐,默认字符间距为 0。

对齐方式和字符间距在 [nl] 标签之间保持不变。

[jl2][jl5] 标签只能在行内输出任何文本之前使用。否则视为错误(TAG CONFLICT)。

一旦某行输出了 [jl5] 文本,该行就不能再设置其他对齐标签。否则视为错误(TAG CONFLICT)。

[jl3] 标签不能在行内输出右对齐文本([jl4])之后使用。否则视为错误(TAG CONFLICT)。

使用与当前值相同的对齐标签 [jl?] 不会导致 TAG CONFLICT 错误。

在两端对齐的行中,[sc?] 标签指定的额外字符间距会被忽略。两端对齐规则决定了额外的空格。

如果一行所需的字符过多,或者消息所需的行数过多,则视为错误(TOO BIG)。[nl] 标签除非后面有文本输出,否则不会开始新的一行。

如果左对齐文本和居中对齐文本出现在同一行,则左对齐文本的最后一个字符和居中对齐文本的第一个字符之间必须至少有一个空白字符单元。否则视为错误(TOO BIG)。

如果居中对齐文本和右对齐文本出现在同一行,则居中对齐文本的最后一个字符和右对齐文本的第一个字符之间必须至少有一个空白字符单元。否则视为错误(TOO BIG)。

如果左对齐文本和右对齐文本出现在同一行,则左对齐文本的最后一个字符和右对齐文本的第一个字符之间必须至少有一个空白字符单元。否则视为错误(TOO BIG)。

消息中仅允许使用上述七个标签,否则视为错误(BAD TAG)。格式错误的标签或不匹配的单个左括号或右括号均为 BAD TAG 错误。

对于本题,你需要编写一个程序,输入字符单元阵列的尺寸和一个 MULTI 字符串,并输出错误字符串或正确格式化的消息。

输入格式

输入的第一行包含一个整数 $N$ ($1 \le N \le 100$),表示后续的数据集数量。每个数据集由单行组成,包含一个整数 $R$ ($1 \le R \le 25$),一个空格,一个整数 $C$ ($1 \le C \le 80$),一个空格,以及该行的剩余部分作为 MULTI-Text 字符串。$R$ 是字符单元阵列的行数,$C$ 是字符单元阵列的列数,MULTI-Text 是要格式化的文本。

输出格式

对于每个数据集,单独占一行输出数据集编号,如果发生错误,则紧接着单独占一行输出错误字符串(TAG CONFLICTTOO BIGBAD TAG);如果没有错误,则输出 $R$ 行,每行恰好包含 $C$ 个字符(不包括终止换行符),表示使用空格字符填充空字符单元的格式化消息。每个数据集结果的最后一行应为一个单独的空行。

说明:为了方便评分,包含错误的数据集只会包含一种类型的错误。

样例

样例输入 1

7
4 24 [jl2]MESSAGE[nl][jl3]MESSAGE[nl][jl4]MESSAGE
2 24 This[jl3]is a[jl4]message
2 24 This is a very long message which will not fit
4 24 This[nl]message[nl]has[nl]too[nl]many[nl]lines
2 32 [jl3]This message has a [[ and a ]]
2 32 This is a bad tag[xy34]
2 32 [jl3]This message [jl5] has a tag conflict.

样例输出 1

1
MESSAGE                 
        MESSAGE         
                MESSAGE 

2
This    is a    message 

3
TOO BIG
4
TOO BIG
5
 This message has a [ and a ] 

6
BAD TAG
7
TAG CONFLICT

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.