Codeforces Rating System

来翻译一下官方文档,但是建议看英文原文,本文可能会出现一些错误,虽然不是为了方便自己查阅用的。


首先,对于人 \(i\),定义 \(r_i\) 是他的 rating,对于人 \(i,j\),定义 \(P_{i,j}\) 为在一场比赛中 \(i\)\(j\) 强的概率。

Codeforces 想尽力让这个柿子成立:

\[P_{i,j}=\frac{1}{1+10^{\frac{r_j-r_i}{400}}}\]

一场比赛开始前,定义 \(seed_i\) 为第 \(i\) 个人的期望排名。明显有 \(seed_i=1+\sum\limits_{j\ne i}P_{j,i}\)

比赛结束后(如果此时还是 rated 的话),取 \(m_i\)\(seed_i\) 和实际排名 \(rank_i\) 的几何平均数(\(m_i=\sqrt{seed_irank_i}\))。根据实际排名计算出这个人在这场比赛中的表现 rating \(R_i\),然后这个人的 rating 变化是 \(d_i=\frac{R_i-r_i}{2}\)

不过这还没完。为了让 rating 平均变化更接近 0,还要进行微调。

再定义一个数 \(inc\),让所有 \(d_i+=inc\)

计算方法,先进行第一次微调,这次让 \(inc=-1-\sum d_i\)。这保证了所有人的平均变化靠近 0 又在 0 以下。

然后进行第二次微调,取比赛前 rating 前 \(s=\min(n,4\sqrt{n})\) 高的人(\(n\) 是参赛人数),合理设置 \(inc\) 使得前 \(s\) 个人的平均变化为 0。但是这个 \(inc\) 也不能太大,所以 \(inc=\max(\min(inc,10),0)\)。用这个 \(inc\) 进行第二次微调。

所以说,这 rating 计算比隔壁某 A 姓 OJ 恶心多了,对失常发挥一点都不友好……

猜你喜欢

转载自www.cnblogs.com/1000Suns/p/11701028.html
今日推荐