【高斯消元】[CTSC2001 D2]GPA 排名系统

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”。

【高斯消元】[CTSC2001 D2]GPA 排名系统_第1张图片**

分析:我们可以根据题目描述列出方程
gi,j 表示第i个学生的第j门课的成绩, dj 为修正值, sj,k 名学生同时选择了第j门和第k门学科,那么对于第j门学科,可以得到

mi=1gi,j1gi,jsj,j+dj=mi=1gi,j1nk=1gi,k1(gi,k+dk)nk=1sj,k
这样一个方程,是不是特别简单。
继续化简
nk=1sj,ksj,ji=1gi,j1mgi,j+k=1nsj,kdj=i=1gi,j1mk=1gi,j1gi,k1n(gi,k+dk)

nk=1sj,ksj,ji=1gi,j1mgi,j=i=1gi,j1mk=1gi,j1gi,k1n(gi,k+dk)k=1nsj,kdj

nk=1sj,ksj,ji=1gi,j1mgi,j=i=1gi,j1mk=1gi,j1gi,k1ngi,k+i=1gi,j1mk=1gi,j1gi,k1ndkk=1nsj,kdj

nk=1sj,ksj,ji=1gi,j1mgi,j=i=1gi,j1mk=1gi,j1gi,k1ngi,k+k=1nsj,kdkk=1nsj,kdj

nk=1sj,ksj,ji=1gi,j1mgi,ji=1gi,j1mk=1gi,j1gi,k1ngi,k=k=1nsj,kdkk=1nsj,kdj

然后,我们把常数项移到右边去
k=1nsj,kdkk=1nsj,kdj=nk=1sj,ksj,ji=1gi,j1mgi,ji=1gi,j1mk=1gi,j1gi,k1ngi,k

由于只有d_j是未知的,我们对于每一个学科分别列一个方程,就可以得到n个方程,如下。

s1,1k=1ns1,ks2,1sn,1s1,2s2,2k=1ns2,ksn,2s1,ns2,nsn,nk=1nsn,knk=1s1,ks1,1i=1gi,11mgi,1i=1gi,11mk=1gi,k1ngi,knk=1s2,ks2,2i=1gi,21mgi,2i=1gi,21mk=1gi,k1ngi,knk=1sm,ksn,ni=1gi,n1mgi,ni=1gi,n1mk=1gi,k1ngi,k

用高斯消元解出即可。

代码暂时写不出。
如果你看到这行字,恭喜你,找到正解,因为细心你已经发现,这些方程化简之后,可能没有固定的解,但是答案不是fail,当你发现这个,你已经进入坑底。Congratulation!。下面请你帮我继续挖,挖完了记得在评论里给我链接。Best wishes!

你可能感兴趣的:(C++,数论,高斯消元,gpa,CTSC)