概述:
新版 COCI\tt COCICOCI 竞赛加分系统均是由@yanghongzheng出版的基于Elo\tt EloElo博弈算法的新算法[1]
该积分基于Elo\tt EloElo Rating\tt RatingRating System\tt SystemSystem(简称Elo博弈算法),类似于Elo\tt EloElo,但有有了许多修改,我们暂定为Probabilistic\tt ProbabilisticProbabilistic Rating\tt RatingRating Update\tt UpdateUpdate (PRU)\tt (PRU)(PRU)算法.(一款基于原版ELO算法的超强算法)
新版上线后,COCI团队将会利用此算法对Rating值进行调整.[2]
正常情况下参赛选手状态为Rated\tt RatedRated,状态被评为Unrated\tt UnratedUnrated包括但不限于:
1. 比赛作弊违规致使状态被评为Unrated\tt UnratedUnrated
2. 本场比赛因不可抗力因素导致无法正常进行的将参与本场比赛的所有用户设置为Unrated\tt UnratedUnrated
3. 参加本次比赛Rating分数∏i=1nai≤−138\prod_{i=1}^{n} a_i \leq -138∏i=1n ai ≤−138,会将用户设置成Unrated\tt UnratedUnrated且分数连续1个月停留在0(在这一个月内不管是rk1还是rk2,不加分)
对于 Rated\tt RatedRated 的选手,在每场比赛中,会获得一个「表现分」。这个值代表了你在比赛中的表现如何。
这意味着如果你持续获得 x\tt xx 的表现分,分数从x−2000\tt x-2000x−2000开始计算,当你参加约13.7213.7213.72次比赛后,你的成绩将会与你的真实水平相差幅度只有11.8%∼29.4%11.8\%\sim 29.4\%11.8%∼29.4%,已经十分接近与你的成绩。
请不要担心你的成绩,如果你Rating\tt RatingRating过于低下,那么如果你第二次或第三次比赛时没有被设置为Unrated\tt UnratedUnrated,你的 Rating\tt RatingRating 将会呈直线型上涨
计算竞赛分:
新增的COCI\tt COCICOCI竞赛被分为Score\tt ScoreScore和Unscore\tt UnscoreUnscore,意为评分和不评分.
普通竞赛正常情况下不使用AI\tt AIAI,不作弊,系统就会自动评测为Score\tt ScoreScore,如下:
* 一场比赛如果按照Probabilistic\tt ProbabilisticProbabilistic Rating\tt RatingRating Update\tt UpdateUpdate (PRU)\tt (PRU)(PRU)算法计算,那么计算的分数可能会下降(类似Acgo\tt AcgoAcgo的评测系统)
* 如果分数趋于负的情况,那么系统会自动调整至000,而不是−n-\tt n−n,这样计算即调整了赛事的公平性,也提醒了队员们自己所需要增加的技术和内容
* 附加分情况:一场比赛如果有n\tt nn人AK\tt AKAK(趋于1AK人数+本次Rating−原来Rating总人数\dfrac{\tt 1}{ \tt AK人数+ {\frac{本次Rating -原来Rating}{\tt 总人数}}}AK人数+总人数本次Rating−原来Rating 1 ),那么附加分取AK人数1×14\frac{\tt AK人数}{\tt 1}\times\frac{\tt 1}{\tt 4}1AK人数 ×41
如果是竞赛中作弊,那么系统会将用户评测模式调整至Unscore\tt UnscoreUnscore,此模式下只减不增
* 一次比赛作弊,分数不会像Acgo\tt AcgoAcgo扣的那么少,系统扣分将会设置原Rating\tt RatingRating值为负,以后几场分数将趋于负分
如果是出题人/验题人参加了比赛:
* 如果出题人/验题人(下同)参加了比赛,那么系统也将会调整至 Unscore\tt UnscoreUnscore,但不会调整至负分.
* 当出题人参加比赛后,系统将自动将出题人的名次删除,以确保COCI\tt COCICOCI赛事的公平性和准确性.
* 如果出题人有泄题、偷题、故意修改数据等一系列违规行为,系统也会调整至Unscore\tt UnscoreUnscore,且分数在未来5\tt 55场赛事之内分数始终显示为0
算法详情:
设有 nnn 个人参加一场比赛并 Rated,并且第 iii 个人的 Rating 是 rir_iri ,得分为 sis_isi (作弊视严重度进行修改,不严重取 −1-1−1),那么第 iii 个人新的 Rating ri′r_i'ri′ 计算方法如下:
* 设其获胜于第 jjj 个人的概率 Pi,j=11+10rj−ri400P_{i,j} = \dfrac{1}{1 + 10^{\frac{r_j-r_i}{400}}}Pi,j =1+10400rj −ri 1 。
* 如果 iii 的排名大于 jjj,那么 Si,j=1S_{i,j} = 1Si,j =1,否则 Si,j=0S_{i,j} = 0Si,j =0。
* 最后计算 Δi,j=K(Si,j−Pi,j)Δ_{i,j} = K(S_{i,j} - P_{i,j})Δi,j =K(Si,j −Pi,j )。
* 设 CCC 为第一名得分与总分的比值(第一名得分总分\dfrac{第一名得分}{总分}总分第一名得分 )。
* 附加分 Ei=K(n−i)4×AK人数+CK(n−i)E_i = \dfrac{K(n - i)}{4\times \text{AK人数}} + CK(n-i)Ei =4×AK人数K(n−i) +CK(n−i)。
* 求出所有的 j≠ij \neq ij=i 的 Δi,jΔ_{i,j}Δi,j 总值 ΔiΔ_iΔi (Δi=∑j≠iΔi,jΔ_i = \sum_{j \neq i} Δ_{i,j}Δi =∑j=i Δi,j ),并最小值修正 Δi←max(Δi,−K×i×n)Δ_i \leftarrow \max(Δ_i,-K\times i \times n)Δi ←max(Δi ,−K×i×n),然后最大值修正 Δi←min(Δi,K×i×n)Δ_i \leftarrow \min(Δ_i,K \times i \times n)Δi ←min(Δi ,K×i×n),修正
Ei←min(Ei,0.2C×K×i×n)E_i \leftarrow \min(E_i,0.2C \times K\times i \times n)Ei ←min(Ei ,0.2C×K×i×n)。
* 如果 si<0s_i < 0si <0,那么令 Δi=KsiΔ_i = Ks_iΔi =Ksi ,Ei=−CKE_i = -CKEi =−CK。
* 更新后的 ri′=max(ri+Δi+Ei,−1)r_i' = \max(r_i+Δ_i + E_i,-1)ri′ =max(ri +Δi +Ei ,−1)。
* KKK 动态修改,正常取 484848。
赛事模拟:
* 本次排位分将会从YHZ's Round 1 | 邀请码:nAfz开始计算,特别地,YHZ's Round 1 的 k = 256
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
本文档的版本记录
2026/2/14 after Ver 1.00: 对于竞赛分的计算和详情,第一版
2026/2/14 even Ver 1.01:重新修改算法部分内容
2026/2/15 after Ver 1.19:重新修改算法部分内容,更新附加分
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. Probabilistic\tt ProbabilisticProbabilistic Rating\tt RatingRating Update\tt UpdateUpdate (PRU)\tt (PRU)(PRU) ↩︎
2. COCI\tt COCICOCI Round\tt RoundRound#2初赛(邀请码:pxxt\tt pxxtpxxt) ↩︎