#960. [信息与未来 2024] 数据排序

[信息与未来 2024] 数据排序

题目描述

在计算机世界中,“表格”是一种简单、基础而且十分通用的数据结构,在数据库、人工智能等领域中都有广泛的应用。表格由若干行、若干列的单元格组成:

Name p1 p2 p3 Score
ZhangSan 40 30 28 98
LiSi 28 30
WangWu 25 20 85

CSV (Comma-Separated Values) 是一种常用的表格格式。Dr. X 需要你编程处理简化的 CSV 文 件,格式规定如下:

  • CSV 文件包含 nn 行数据,其中第一行是标题行。

  • CSV 文件每行一个字符串,对应了表格的一行。行中的单元格由半角逗号分隔。

  • 每个单元格至少包含一个字符。单元格有两种类型:

    • 数值单元格:由至少一个数字字符 (09)(0\sim 9) 组成。
    • 字符串单元格:由数字字符 (09)(0\sim 9) 和大小写字母 (az,AZ)(\tt{a\sim z},\tt{A\sim Z}) 组成,且至少包含一个字母。
  • 标题行的所有单元格都是字符串单元格,且互不相同。标题行中包含了列的名称。

以下是一个 CSV 文件的示例:

Name,p1,p2,p3,Score
ZhangSan,40,30,28,98
LiSi,40,28,30,98
WangWu,40,25,20,85

你的任务是根据指定的列为表格中的行排序。例如根据 Score- , Name+ , p3- 排序意味着:

  • 优先按 Score 列从大到小排序。Score 列都是数值单元格,因此按数值排序。

  • 如果 Score 列相同,按 Name 列从小到大排序。Name 列都是字符串单元格,因此按照字典排序。

  • 如果 Score 和 Name 列都相同,按 p3 列从大到小排序。p3 列都是数值单元格,因此按数 值排序。

我们保证 CSV 文件每一行的单元格数量相同,且除标题行外,每一列要么全是数值单元格,要么全是字符串单元格

输入格式

输入数据分为两部分。第一部分描述了 CSV 表格:

  • 第一行一个整数 nn,表示 CSV 文件的行数(包含标题行)。
  • 接下来 nn 行,每行一个字符串,描述 CSV 表格中的行。

第二部分描述了排序要求:

  • 第一行一个整数 mm,表示排序依据列的数量。

  • 接下来 mm 行,每行一个字符串,按顺序给出了排序依据的列名及排序方式(加号或减号)。加号代表升序排列、减号代表降序排列。

输出格式

输出 nn 行,为排序后的 CSV 表格(包含标题行)。对于所有排序依据列的值都相同的行,保持它们在输入文件中的相对顺序。

4
Name,p1,p2,p3,Score
ZhangSan,40,30,28,98
LiSi,40,28,30,98
WangWu,40,25,20,85
3
Score-
Name+
p3-
Name,p1,p2,p3,Score
LiSi,40,28,30,98
ZhangSan,40,30,28,98
WangWu,40,25,20,85

提示

对于 100%100\% 的数据,满足 1n1001 \leq n \leq 100,表格不超过 1010 列,字符串单元格不超过 1616 个字符,且数值单元格中的数值是 0010410^4 之间的整数。

本题原始满分为 20pts20\text{pts}