计分系统
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 的当前分数。排行榜实时更新,无需等待。