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分 ┃████████
🎓 设计理念
- 动态基础分:解题人越多,分数越低 → 鼓励快速解题
- 血榜奖励:只奖励前3名 → 激励冲击榜首
- 时间奖励:所有人都有,早解多得 → 鼓励持续参与
- 公平性:即使不是前三名,早解题也能获得可观的时间奖励
❓ 常见问题
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 国际许可协议