命令行中有一个列目录的程序,可以按照指定的方式将目录中的文件罗列出来。小A想进一步改进列表程序,希望在给定的显示宽度限制下用最少的行格式化输出所有的文件名,且排在前面的行尽可能满列。 显示规则为:文件列表按字典序左对齐的方式显示为若干列,列宽由所有文件名的最大长度确定,列间用2个空格分割,最后一列后无空格。 输入 输入数据有若干组,每组为待罗列的文件名列表,格式如下: 每组的第一行为空格分隔的两个整数 � , � ( 0 < � ≤ � ) n,w(0<n≤w),分别为该组文件的数量和一行能够显示的宽度。随后的 � n行中,每行为一个文件名,保证每个文件名最长不超过指定的显示宽度。 输出 对每组输入,先根据要求的宽度输出对应个-,随后按要求输出若干列格式化的文件名列表,所有列表中文件名自上而下、从左到右按字典序排列。 示例输入 见样例 示例输出 见样例 No. Test Input Test Output Time limitation Memory limitation Test Case 1 View plain 20 60↵ a↵ b↵ c↵ d↵ e↵ f↵ g↵ h↵ i↵ j↵ k↵ l↵ m↵ n↵ o↵ p↵ q↵ r↵ s↵ t↵ 10 10↵ a↵ b↵ c↵ d↵ e↵ f↵ g↵ h↵ i↵ j↵ ↵ View plain ------------------------------------------------------------↵ a b c d e f g h i j k l m n o p q r s t↵ ----------↵ a d g i↵ b e h j↵ c f↵
时间: 2023-08-15 17:47:33 浏览: 245
这道题目是一道比较经典的贪心题目,具体思路如下:
1. 首先读入输入,获取行宽和文件列表。
2. 对于文件列表进行排序。
3. 计算出一行最多可以放几个文件,即 $num = \lfloor \frac{w+2}{maxlen+2} \rfloor$。
4. 计算出需要多少行,即 $row = \lceil \frac{n}{num} \rceil$。
5. 对于每一行,都输出 $num$ 个文件名,如果最后一行不足 $num$ 个文件,则补充空格。
6. 输出完所有行之后,输出一行分隔符。
参考代码如下:
阅读全文