@sfsdf710一步一步写的详细点:
1.如果学生A和B是朋友,那么A比B成绩好记做一次“好”,A比B成绩相平或差记做一次“差”。
2.那么全班30人,假设每人有X和朋友的情况,这一次考试结果比较完后“好”的总次数N好+“差”的总次数N差=30*x,其中N好<=N差,得出N好<=30*X/2,只有当没有出现任何一对朋友平分时N好=30*X/2=15X
3.借用老僧的说明,得出X为奇数,(可以偷懒下不用列偶数的式子)
4.假设全班有Y个好学生,计算这Y个好学生产生的“好”的总数必然小于等于15X(参照第2点)。我们来看看怎么列出的式子Y*(X+1)/2 + (1+(X-1)/2)/2*(X-1)/2 <=15X
5.每个好学生能产生至少(X+1)/2个“好”,同时,为了使Y值最大,需要尽可能的让这些好学生产生的“好”的数量越少越好。
6.将30个学生按分数从高到低排序记为1号到30号,很不幸发现我们没办法让每个好学生产生的“好”数都为(X+1)/2时让N好=15X。
7.假定第一名的学生没有和朋友平分的,则产生的“好”N1=X. (如果第一名的学生的朋友中有z个人和他平分,那么N1相应少z,同时基于点2可知N好也不再等于15X,要相应减少数量z,即式子4左右都减z不影响结果,就懒得列出有平分时的式子了)
8.同上假定2号也没有和朋友平分的,第二名学生产生的“好”N2>=X-1.同上(为了让N2小,最好2号为1号的朋友,否则N2=X会浪费了“好”的次数)
9.同上一直到第(x+1)/2号N(x+1)/2>=(X+1)/2.之后的好学生产生的好也都>=(X+1)/2
10.把Y个好学生产生的“好”求和得(X)+(X-1)+(X-2)+….+(X+3)/2+(X+1)/2+…+(X+1)/2总共Y个数相加
11.每个数中的(X+1)/2拿出来求和后剩下欠(X-1)/2名多出来的数为从1到(X-1)/2的自然数列求和。
12.求和得Y*(X+1)/2+(1+(X-1)/2)/2*(X-1)/2
画个图方便对照理解:
1-30按成绩排序,各不相同,1-25每个人比后四个人成绩高,这样除了5-25每个人有四条入的线4条出的线,1-4入的线为0/1/2/3.接下来把1-25缺少的出的线(5,4,3,2,1,1,1,....,1)都连接到26-30上刚好.
