C1036 - Unix ls命令
题目描述
你所就职的计算机公司正在推出全新的计算机产品线,并且正在开发一款新的类Unix操作系统,该操作系统将与新计算机一同推出。你的任务是编写ls函数的格式化程序。
你的程序最终将从管道中读取输入(尽管目前你的程序将从输入文件中读取)。输入到你的程序将包括一列(F)文件名,你将根据ASCII字符值的升序对其进行排序,并根据最长文件名(L)的长度格式化为(C)列。
每个文件名长度将在1到60(包括)字符之间,并将格式化为左对齐的列。最右边的一列将是最长文件名的宽度,所有其他列将是最长文件名加2的宽度。
格式化显示尽可能多的列,以适应60个字符的宽度(列显示优先),你的程序应该尽量使用较少的行数(R),并且行应该从左到右填满容量。
输入格式
第1行,一个正整数N,代表接下来有N个文件名
接下来N行,有N个代表文件名的字符串,每个字符串占一行
文件名字符串允许的字符为字母、数字字符(a到z,A到Z,以及0到9),以及以下字符集中的字符 {.、_、-}(不包括花括号)。
所有文件名中都不会出现非法字符,也不会有完全空白的行。
输出格式
第1行,输出一行恰好包含60个短横线(-)
接下来是格式化后的文件名列表,显示时按照文件名ASCII字符值的升序的顺序进行排列:
第1个文件名 到 第R个文件名 排在第1列
第R + 1个文件名 到 第2R个文件名 排在第2列
其他以此类推
具体参考输入输出样式
输入输出样例
| 输入样例 | 输出样例 |
|---|---|
| 19 Mr._French Jody Buffy Sissy Keith Danny Lori Chris Shirley Marsha Jan Cindy Carol Mike Greg Peter Bobby Alice Ruben |
![]() |
| 10 tiny 2short4me very_long_file_name shorter size-1 size2 size3 much_longer_name 12345678.123 mid_size_name |
![]() |
输入输出样例解释
本题题意比较难理解,这里做一个简要的解释(以第1组数据做说明):
输入N个字符串,然后需要对字符串进行按ASCII字符值的升序对其进行排序
格式化显示这些字符串:
- 需要在60个字符宽度内显示
- 按列优先的方式左对齐输出
- 显示的最后一列的宽度为最长文件名的宽度M,其他列的宽度为最长文件名的宽度M + 2个字符宽度
- 用空格补齐对应的显示宽度
这里用一张简单的图示来说明下:

数据范围与提示
100%的数据:$1 \le N \le 100$,1 <= 文件名字符串长度 <= 60
测试点数目
共10个测试点,每个测试点10分
时间与内存限制
每个测试点时间:1000ms(1.0s),内存:256MiB
输入输出模式
本OJ支持两种输入输出模式

