Start: Jan, 08, 2019 22:00:00
2018年秋季学期程序设计基础(C语言)期末考试(补题)
End: Jan, 20, 2019 02:00:00
Time elapsed:
Time remaining:

成绩单统计-高级 2556

Time Limit:  1 s      Memory Limit:   256 MB
Submission:0     AC:0     Score:100

Description

期末考试之后,老师们都要在成绩单中获取一些有用的信息,但是数据量太大,人工统计总会耗费一些时间,编写一个程序来统计将会是一个较好的选择。现在,请你编写一个程序,要求能满足下述内容。

一份成绩单中包含 N 条信息,每条信息包含 学号,班级,高等数学成绩,程序设计基础成绩,线性代数成绩

但存在某些人其中一门课没选的情况,如某同学线性代数课未选,则该同学的线性代数成绩为 *(星号)

现有如下需求:

1. 某班级的某一门课的平均成绩

2. 某班级按总成绩降序排列的成绩单

3. 一门课成绩前k个同学的姓名

输入输出具体格式及相关要求请看input和output

Input

输入为单组输入

第一行输入成绩单总数据行数N(1<=N <= 10000)

之后 N 行输入 N 条信息

每条信息包含5个数据项,数据项依次表示:学号,班级,高等数学成绩,程序设计基础成绩,线性代数成绩

学号为5位数字,即在[00000,99999]的范围内

班级为3位数字,即在[100,999]的范围内

课程成绩均为[0,100]的数字或者为*(星号)

之后为一个数字Q(1<=Q<=200) 表示有Q条询问

随后为Q条询问,询问格式如下:

1.  1 x y 表示上述的第一个需求,即x班的y课的平均成绩(其中高等数学的y为1,程序设计基础为2,线性代数为3),若x班不存在选y课的同学,输出-1即可

2.  2 x 表示上述的第二个需求,即x班按总成绩降序排序的成绩单,若总成绩相同,按照学号从小到大排列

3.  3 y k 表示y课成绩前k位同学,按成绩降序排列,若存在相同成绩,则按学号从小到大排列,若选择该课的同学不足k位,输出全部选择该课的同学即可,不存在选择该课的同学则什么都不用输出

输入保证学号唯一,保证输入的班级至少有一位同学


Output

对于上述每一条询问,输出相关内容。

对于询问1:第一行先输出“Query #c: 1 x y” 表示第c个询问是查询x班的y课的平均成绩

输出一行平均值,平均值可能为小数,输出四舍五入保留两位小数即可,若为整数,也需输出小数位

对与询问2:第一行先输出“Query #c: 2 x” 表示第c个询问是查询x班的总成绩降序排列成绩单

之后每一行输出一位同学的成绩信息,信息由 学号,总成绩组成(学号为5位数字)

对于询问3:第一行先输出“Query #c: 3 y k” 表示第c个询问是y课的前k位同学

之后每一行输出一位同学的成绩信息,信息由 学号,y课成绩组成(学号为5位数字)

Samples

input
5 00000 101 100 99 98 00001 101 80 90 95 83831 102 78 90 88 45678 102 * 78 90 44425 103 78 94 100 3 1 102 1 2 101 3 1 5
output
Query #1: 1 102 1 78.00 Query #2: 2 101 00000 297 00001 265 Query #3: 3 1 5 00000 100 00001 80 44425 78 83831 78

Hint

为避免浮点误差,输出两位小数可按如下形式:

printf("%.2f\n",ans + eps);

ans为你的答案,eps = 1e-8 或者其他较小的小数