计分系统
CBCTF 支持三种计分类型, 可在比赛中对每个 flag 独立配置。
计分类型概览
| 类型 | score_type | 特点 |
|---|---|---|
| 静态分数 | 0 | 固定分值, 不随解题人数变化 |
| 线性分数 | 1 | 每多一人解题, 分数线性递减至下限 |
| 对数分数 | 2 | 前期降分快, 后期趋于平稳, 最真实的 CTF 体验 |
参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
Score | 1000 | 初始分值(第 0 人解题时的分数) |
MinScore | 100 | 分数下限, 解题人数再多也不低于此值 |
Decay | 50 | 衰减控制参数(含义因类型而异, 见下) |
静态分数(Static, type=0)
score = Score
分数固定不变, 不受解题人数影响。
示例: Score=500, 无论多少人解题, 每人得 500 分。
适用场景: 难度固定的题目, 或不希望使用动态计分的比赛。
线性分数(Linear, type=1)
score = max(Score - Decay × solvers, MinScore)
其中 solvers 为解题人数, Decay 为每多一人解题扣除的分数。
示例(Score=1000, MinScore=100, Decay=20):
| 解题人数 | 分数 |
|---|---|
| 0 | 1000 |
| 10 | 800 |
| 20 | 600 |
| 40 | 200 |
| 50+ | 100(下限) |
适用场景: 竞争性较强、参赛人数较少的比赛。
对数分数(Logarithmic, type=2)
score = (Score - MinScore) × exp(-5/Decay × solvers) + MinScore
Decay 控制衰减速率, 值越大衰减越慢。k = 5 / Decay。
示例(Score=1000, MinScore=100, Decay=50):
| 解题人数 | 分数(近似) |
|---|---|
| 0 | 1000 |
| 10 | 835 |
| 25 | 669 |
| 50 | 451 |
| 100 | 202 |
| 200 | 102 |
前期降分较快, 后期趋于平稳。适用场景: 大型 CTF 比赛, 题目难度分布合理。
三血奖励(Blood Bonus)
当比赛的 blood 字段启用时, 首血、二血、三血额外获得初始分的奖励:
| 名次 | 奖励比例 | 示例(Score=1000) |
|---|---|---|
| 首血 | +5% | +50 分 |
| 二血 | +3% | +30 分 |
| 三血 | +1% | +10 分 |
奖励基于 Score(初始分值), 与当前实际得分无关。
多 Flag 题目
每道题可配置多个 flag, 每个 flag 独立设置计分类型和参数, 每个 flag 独立计分。
选手每次提交, 平台实时重算该 flag 的分数并更新排行榜。
分数重算
每次有新的提交(无论对错), 平台都会重算相关 flag 的当前分数。排行榜实时更新, 无需等待。