#31. 行列转化

内存限制:256 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: hiram

题目描述

题目描述: 计算一个二维表进行行列转换后的结果,聚合方式为求和。

行列转换定义:以一列数据作为主键,一列数据作为转换列,一列数据作为指标列。将去重后的转换列的值转换到维度,将指标列数据以主键标识聚合到对应的转换维度下。

以下便是以姓名为主键,科目为转换列,成绩为指标列的简单行列转换示例:

张三    0606    语文    78
张三    0607    数学    92
李四    0606    语文    85

行列转换后:

张三    0606    78    92
李四    0606    85    -1

注1:行按照主键值进行升序排列,列的部分,先按原始顺序输出除去转换列与指标列之外的其他所有列,然后输出新增列,新增列顺序按转换值进行升序排列。

注2:同主键,同转换值对应多个指标值的情况下,对此多个指标值进行求和。

注3:一个主键,对应的非特殊列(非主键列,非转换列,非指标列)值存在多个的情况下,输出时取原始数据中,主键对应此非特殊列的第一个值。

注4:主键不对应某些转换值的情况,例如描述案例中 李四的数学成绩,输出-1。

输入格式

第一行输入以空格分隔的五个数字,分别对应,二维表的行数,二维表的列数,主键列索引,转换列索引,指标列索引。

第二行开始,每行对应这个二维表的每一行数据,所有数据均为非负整数,每个数据之间以空格分隔。

输出格式

最终输出为结果数据集中所有数字的和。

结果数据集为进行聚集方式为求和的行列转化后的二维表数据(不包含列名)。

样例: 输入:

5 4 0 2 3

1 2 1 1

1 1 2 2

2 3 2 3

2 2 3 4

1 3 2 5

结果数据集:

1 2 1 7 -1

2 3 -1 3 4

对结果数据集所有数字求和后的最终输出: 21