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
1.png
10
tiny
2short4me
very_long_file_name
shorter
size-1
size2
size3
much_longer_name
12345678.123
mid_size_name
2.png

输入输出样例解释

本题题意比较难理解,这里做一个简要的解释(以第1组数据做说明):

  1. 输入N个字符串,然后需要对字符串进行按ASCII字符值的升序对其进行排序

  2. 格式化显示这些字符串:

    • 需要在60个字符宽度内显示
    • 按列优先的方式左对齐输出
    • 显示的最后一列的宽度为最长文件名的宽度M,其他列的宽度为最长文件名的宽度M + 2个字符宽度
    • 用空格补齐对应的显示宽度

这里用一张简单的图示来说明下:

4.png

数据范围与提示

100%的数据:$1 \le N \le 100$,1 <= 文件名字符串长度 <= 60

测试点数目

共10个测试点,每个测试点10分

时间与内存限制

每个测试点时间:1000ms(1.0s),内存:256MiB

输入输出模式

本OJ支持两种输入输出模式

1. 标准输入输出模式:
直接从标准输入和标准输出读写数据,不需要使用freopen进行文件输入输出重定向
2. 文件输入输出模式(国内信奥赛输入输出模式):
从文件中读写数据,需要使用freopen进行输入输出重定向
本题输入文件名为:C1036.in,输出文件名为:C1036.out