CTF比赛计分算法说明

📊 总分计算公式

总分 = 动态基础分 + 血榜奖励 + 时间奖励

1️⃣ 动态基础分(随解题人数递减)

公式:

基础分 = (初始分 - 最低分) / (1 + k × 已解题人数) + 最低分

参数说明:

  • 初始分:题目的起始分数(如 500 分)
  • 最低分:题目的保底分数(如 100 分)
  • 已解题人数:在你之前有多少人解出这道题
  • k(衰减系数):根据难度不同
  • 简单题:k = 0.08(衰减快)
  • 中等题:k = 0.05
  • 困难题:k = 0.03(衰减慢)

举例(500分题,最低100分,中等难度):

第1个解出:基础分 = (500-100)/(1+0.05×0) + 100 = 500分
第10个解出:基础分 = (500-100)/(1+0.05×9) + 100 = 375分
第50个解出:基础分 = (500-100)/(1+0.05×49) + 100 = 215分

💡 意义:鼓励尽早解题,解题人数越多,分数越低


2️⃣ 血榜奖励(只给前3名)

公式:

血榜奖励 = 基础分 × 血榜系数

一血(第1名):基础分 × 8%
二血(第2名):基础分 × 5%
三血(第3名):基础分 × 3%
第4名及之后:0分

举例(基础分500分):

一血奖励:500 × 0.08 = 40分
二血奖励:500 × 0.05 = 25分
三血奖励:500 × 0.03 = 15分

💡 意义:重点奖励前3名,激励竞争


3️⃣ 时间奖励(所有人都有)

公式:

时间奖励 = 基础分 × 10% × (1 - (已过时间/总时长)²)

举例(基础分500分,24小时比赛):

1小时解出  时间奖励 = 500 × 0.1 × (1-(1/24)²)  = 49
12小时解出 时间奖励 = 500 × 0.1 × (1-(12/24)²) = 37
23小时解出 时间奖励 = 500 × 0.1 × (1-(23/24)²) = 4

时间奖励比例表:

解题时机 时间比例 剩余奖励 实际例子(500分题)
比赛开始 0% 100% 50分
1/4时长 25% 93.75% 46.9分
1/2时长 50% 75% 37.5分
3/4时长 75% 43.75% 21.9分
比赛结束 100% 0% 0分

💡 意义:所有人都能获得时间奖励,鼓励尽早解题,但不会过分惩罚后来者


🎯 完整示例

场景1:一血,比赛开始1小时解出(500分中等题)

动态基础分 = (500-100)/(1+0.05×0) + 100 = 500分
血榜奖励   = 500 × 8% = 40分
时间奖励   = 500 × 10% × (1-(1/24)²) = 49分
──────────────────────────────────────
总分      = 500 + 40 + 49 = 589分

场景2:第10名,比赛进行12小时解出

动态基础分 = (500-100)/(1+0.05×9) + 100 = 375分
血榜奖励   = 0分(只有前3名有)
时间奖励   = 375 × 10% × (1-(12/24)²) = 28分
──────────────────────────────────────
总分      = 375 + 0 + 28 = 403分

场景3:第50名,比赛快结束时解出

动态基础分 = (500-100)/(1+0.05×49) + 100 = 215分
血榜奖励   = 0分
时间奖励   = 215 × 10% × (1-(23/24)²) = 1分
──────────────────────────────────────
总分      = 215 + 0 + 1 = 216分

📈 分数衰减曲线

以 500 分题(最低 100 分)为例:

解题排名 → 基础分
─────────────────
第1名    →  500分  ┃█████████████████████████
第5名    →  420分  ┃█████████████████████
第10名   →  366分  ┃██████████████████
第20名   →  300分  ┃███████████████
第30名   →  263分  ┃█████████████
第50名   →  215分  ┃██████████
第100名  →  166分  ┃████████

🎓 设计理念

  1. 动态基础分:解题人越多,分数越低 → 鼓励快速解题
  2. 血榜奖励:只奖励前3名 → 激励冲击榜首
  3. 时间奖励:所有人都有,早解多得 → 鼓励持续参与
  4. 公平性:即使不是前三名,早解题也能获得可观的时间奖励

❓ 常见问题

Q1: 为什么我拿了一血但分数不是最高? - A: 因为总分 = 基础分 + 血榜 + 时间。如果你很晚才拿到一血,时间奖励会很少。

Q2: 第4名和第3名差距大吗? - A: 是的。第3名有 3% 血榜奖励(约15分),第4名没有。

Q3: 简单题和困难题的区别? - A: 困难题的分数衰减更慢,即使很多人解出,基础分依然较高。

Q4: 时间奖励是线性递减吗? - A: 不是,使用二次衰减。比赛前半段奖励下降慢,后半段下降快。


💻 技术实现

如果你想验证分数计算,可以使用以下公式:

# 动态基础分
k = 0.05  # 中等难度
base = (initial - minimum) / (1 + k * solves) + minimum

# 血榜奖励
blood = base * 0.08  # 一血
blood = base * 0.05  # 二血
blood = base * 0.03  # 三血

# 时间奖励
time_ratio = elapsed / total_duration
time_bonus = base * 0.1 * (1 - time_ratio ** 2)

# 总分
total = base + blood + time_bonus

本计分系统 v2.1 | 设计者: TheMoon

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处

本文链接:https://www.secsnow.cn/wiki/subject/article/jfsf/

许可协议:署名-非商业性使用 4.0 国际许可协议