跳到主要内容

计分系统

CBCTF 支持三种计分类型, 可在比赛中对每个 flag 独立配置。

计分类型概览

类型score_type特点
静态分数0固定分值, 不随解题人数变化
线性分数1每多一人解题, 分数线性递减至下限
对数分数2前期降分快, 后期趋于平稳, 最真实的 CTF 体验

参数说明

参数默认值说明
Score1000初始分值(第 0 人解题时的分数)
MinScore100分数下限, 解题人数再多也不低于此值
Decay50衰减控制参数(含义因类型而异, 见下)

静态分数(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):

解题人数分数
01000
10800
20600
40200
50+100(下限)

适用场景: 竞争性较强、参赛人数较少的比赛。

对数分数(Logarithmic, type=2)

score = (Score - MinScore) × exp(-5/Decay × solvers) + MinScore

Decay 控制衰减速率, 值越大衰减越慢。k = 5 / Decay

示例(Score=1000, MinScore=100, Decay=50):

解题人数分数(近似)
01000
10835
25669
50451
100202
200102

前期降分较快, 后期趋于平稳。适用场景: 大型 CTF 比赛, 题目难度分布合理。

三血奖励(Blood Bonus)

当比赛的 blood 字段启用时, 首血、二血、三血额外获得初始分的奖励:

名次奖励比例示例(Score=1000)
首血+5%+50 分
二血+3%+30 分
三血+1%+10 分

奖励基于 Score(初始分值), 与当前实际得分无关。

多 Flag 题目

每道题可配置多个 flag, 每个 flag 独立设置计分类型和参数, 每个 flag 独立计分。

选手每次提交, 平台实时重算该 flag 的分数并更新排行榜。

分数重算

每次有新的提交(无论对错), 平台都会重算相关 flag 的当前分数。排行榜实时更新, 无需等待。