Elo rating system(测试版)

https://en.wikipedia.org/wiki/Elo_rating_system
埃洛等级分系统(Elo Rating System)是指由匈牙利裔美国物理学家阿帕德·埃洛创建的一个衡量各类对弈活动水平的评价方法,是当今对弈水平评估的公认的权威方法。
假设A的分数为(R_A),B的分数为(R_B),那么A战胜B的期望为:
E A = 1 1 + 1 0 R B – R A 400 E_A = \frac 1 {1 + 10^{\frac {R_B – R_A} {400} } } EA=1+10400RBRA1
把A和每个人都计算一次期望再求和,然后用总人数减去这个和,就可以当排名的期望:
e x p r a n k A = 13 – ∑ i = 1 n 1 1 + 1 0 R i – R A 400 exprank_A = 13 – \sum_{i = 1}^n \frac 1 {1 + 10^{\frac {R_i – R_A} {400} } } exprankA=13i=1n1+10400RiRA1
于是最后A的分数就会变为
f i n a l s c o r e A = o r i g i n a l s c o r e A + k ∗ ( e x p r a n k A – e n d r a n k A ) finalscore_A = originalscore_A + k * (exprank_A – endrank_A) finalscoreA=originalscoreA+k(exprankAendrankA)
这里的k是一个系数,暂时取16。

#include<bits/stdc++.h>
using namespace std;
map<string, pair<int, int> > msp;
vector<pair<int, string> > sp;
map<string, double> msd;
map<string, int> ori;
bool cmp(pair<int, string> a, pair<int, string> b){return a.first > b.first;}
int main()
{
    freopen("input.txt","r",stdin); freopen("output.txt","w",stdout);
    string s;
    double td;
    int ti;
    for (int i = 1; i <= 13; ++i){
        cin >> s >> ti;
        cin >> msp[s].first >> msp[s].second;
        cin >> td;
    }
    for (auto e : msp){
        if (e.second.second == 0){
            sp.push_back(make_pair(e.second.first, e.first));
            continue;
        }
        double exp = 0;
        for (auto e2 : msp){
            if (e2.second.second == 0) continue;
            exp += 1 / (1 + pow(10.0, (e2.second.first - e.second.first) / 400.0));
        }
        exp = 13.0 - exp;
        msd[e.first] = exp;
        ori[e.first] = int(16.0 * (exp - e.second.second));
        sp.push_back(make_pair(int(e.second.first + 16.0 * (exp - e.second.second)), e.first));
    }
    sort(sp.begin(), sp.end(), cmp);
    for (auto e : sp){
        cout << e.second << " " << ori[e.second] << " " << e.first << " " << msd[e.second] << endl;
    }
    fclose(stdin); fclose(stdout);
    return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值