AtCoder 的 Rating 計算系統基于改進的 Elo 算法,主要包含以下核心機制:
一、基礎計算公式
Rating 是「表現分(Performance)」的加權平均值減去衰減函數 f ( n ) f(n) f(n),其中:
新用戶初始 f ( 1 ) = 1200 f(1)=1200 f(1)=1200,隨著參賽次數 n n n 增加, f ( n ) f(n) f(n) 單調遞減并趨近于 0 0 0。
若穩定保持 X X X 的表現分,Rating會從 X ? 1200 X-1200 X?1200 逐步收斂至 X X X。
二、表現分計算
平均表現分(APerf)?
歷史表現分按時間倒序加權計算:
A P e r f = ( ∑ P e r f i × 0. 9 i ) / ( ∑ 0. 9 i ) APerf = (\sum Perf_i\times 0.9 ^i)/(\sum0.9^i) APerf=(∑Perfi?×0.9i)/(∑0.9i),權重系數 0. 9 i 0.9^i 0.9i 使得近期比賽影響更大。
新用戶默認值根據比賽類型設定: A G C = 1200 / A R C = 1000 / A B C = 800 AGC=1200/ARC=1000/ABC=800 AGC=1200/ARC=1000/ABC=800。
實際表現分(Perf)?
通過參賽者當前 A P e r f APerf APerf 與比賽名次計算得出,具體公式未公開,但遵循Elo系統對勝負概率的預期調整。
三、特殊機制
首場比賽 Rating 可能大幅波動(類似 Codeforces 初始 1500 1500 1500 的懲罰機制)。
參加約 10 10 10 場 Rated 比賽后,Rating 會趨于穩定反映真實水平。
不同比賽類型( A G C / A R C / A B C AGC/ARC/ABC AGC/ARC/ABC)采用獨立的 Rating 體系。
四、對比其他平臺
相比 Codeforces 的固定初始分 1500 1500 1500,AtCoder 的衰減函數設計對新手更友好。
與洛谷采用的類似系統相比,AtCoder 的 Rating 分布更集中在 [ 400 , 1400 ] [400,1400] [400,1400] 區間。
完整公式詳見 AtCoder 官方文檔,實際計算可能包含未公開的調整參數。