GPA 排名系统
**
Gpa.pas (exe)
【问题描述】
目前,高等院校往往采用 GPA(Grade Point Average)来评价学生的学术表现。传
统的排名方式是求每一个学生的平均成绩,以平均成绩作为依据进行排名。
但是这样的排名方法已经引起了教育界以及社会各界人士的争议。因为它存在
着许多弊端。对于不同的课程,选课学生的平均成绩会不同程度地受到课程的难易
程度和老师的严厉程度的制约。因而这样的排名系统无形中就鼓励了学生选择一些
比较容易的课程,因为这样可以事半功倍地获得较高的平均分。
为了克服这些弊端, 我们需要对排名系统做一定的改进。
一种改进的方案是对选第 i 门课的每一个学生的成绩加上一个特定的修正值 di,
例如编号为 j 的学生该课的成绩 Gij 修改为 G’ij=Gij+di。最终使得经过调整后,该课的
平均分等于选该课的所有学生的所有课的平均分。对每一门课都做这样的调整,使
得上述条件对所有课程都满足。这种调整方案一定程度地避免了传统排名系统的不
公正。而你的任务正是根据一个大学某一个年级学生某学年的成绩,给出他们的排
名。假设每一个学生都至少选一门课。
【输入文件】
输入文件为 gpa.in。
输入文件第一行是两个正整数 m( 1<=m<=500)和 n(1<=n<=100),分别表示学
生人数和课程数目。
接下来 m 行是一个矩阵,矩阵中第 i 行的第 j 个元素表示第 i 个学生第 j 门课的
成绩 G(i,j)。输入的成绩是一个 0 到 100 之间的整数,如果该学生没有选这门课,那
么 G(i,j)=-1。由于该方案的施行只是为了获得更加科学的排名,因此调整后的成绩
的数值大小本身没有什么意义,因此调整后的成绩可以不是 0-100 之间的数。
【输出文件】
输出文件为 gpa.out。
输出采用改进方案后这些学生的排名。以学生编号的形式输出,每行是一个学
生的编号。
如果在上述调整后,有若干学生平均分相等(精确到小数点后的三位),则他们的
名次相同,按照任意顺序输出。
当然许多时候,上述调整无法顺利进行,即调整的目标无法达到。(因此,在实
际问题中,我们往往在最小二乘意义下获得一种最接近目标的调整方案。)也有可能
或者因调整不唯一而不能确定学生的名次。若以上两种情况发生,则输出“ fail”。
**
分析:我们可以根据题目描述列出方程
令gi,j表示第i个学生的第j门课的成绩,dj为修正值,sj,k名学生同时选择了第j门和第k门学科,那么对于第j门学科,可以得到
继续化简
然后,我们把常数项移到右边去
由于只有d_j是未知的,我们对于每一个学科分别列一个方程,就可以得到n个方程,如下。
用高斯消元解出即可。
代码暂时写不出。
如果你看到这行字,恭喜你,找到正解,因为细心你已经发现,这些方程化简之后,可能没有固定的解,但是答案不是fail,当你发现这个,你已经进入坑底。Congratulation!。下面请你帮我继续挖,挖完了记得在评论里给我链接。Best wishes!