SP3642 PRETTYP - Pretty Printing
题目描述
一家 IT 公司决定发布内部通讯,介绍成功完成的项目。每个部门提供一段文字,这些文字将被打印在通讯中的指定框内。假设段落仅由字母 a...z 和空格(ASCII 码为 32)组成,且一个单词是指一行中没有空格隔开的最长字符序列。
打印需满足以下条件:
- 文字将以等宽字体从左至右打印,并在每行末尾换行。
- 每行打印的字符数量必须一致。
- 单词需要按照它们在段落中的顺序打印,不能拆分或跨多行打印。
- 同一行上的相邻单词之间必须用一个空格隔开。
- 每行只能包括原段落中的单词和空格。
- 如果某行开头是空格,则该行必须全为空格。
编辑希望通过计算段落打印的不平衡度来评估美观程度。不平衡度定义为每行末尾空格数的立方之和(包括全是空格的行)。不平衡度越小,打印效果越美观。
例如,某段落经以下两种方式打印在三行、每行 20 个字符宽度的框内:
```
aaa bbbbbbbbb c dddd
eeeeeee ffffff
ggggggggg
```
```
aaa bbbbbbbbb
c dddd eeeeeee
ffffff ggggggggg
```
在这个例子中,左侧打印的不平衡度为 $0^3 + 6^3 + 11^3 = 1547$,而右侧为 $7^3 + 6^3 + 4^3 = 623$。显然,右侧的打印更美观。
你的任务是编写一个程序,找出段落在框内打印时的不平衡度最小的方式。
输入格式
输入包含多个数据集。第一行为一个正整数,表示数据集的数量(不超过 20)。随后是每个数据集的描述。
每个数据集的第一行为整数 $L$($0 < L \leq 100$),指的是框的行数。第二行为整数 $W$($0 < W \leq 1000$),表示框的宽度,即每行字符数。之后的若干行为段落,以一个空行结束,段落不超过 1000 个单词。
输出格式
对于每个数据集,输出一行,表示段落按最美观方式打印时的不平衡度。如果无法在指定框内打印段落,则输出 -1。
说明/提示
- $0 < L \leq 100$
- $0 < W \leq 1000$
- 段落最多包含 1000 个单词。
**本翻译由 AI 自动生成**