班级
每个用户都可以创建自己的班级。比如,老师可以为课程创建一个班级,然后把题目和学生加入到此班级中。
通过合理的设置角色及其权限,可以把班级设为公开或私有。
默认班级为 TopsCoding(主题库),用户直接访问 TopsCoding 班级名就会访问主题库,点击 TopsCoding Logo会从任意班级跳转回主题库。
每个班级的题库、讨论、训练以及比赛是独立且自治的。
每个人最多可以创建 2 个班级。
编译器版本及参数
TopsCoding服务器上当前仅安装了C,C++,Python的编译器,因此提交仅限于上面三种语言。所有支持的编译器的编译参数如下:
- C
gcc -O2 -Wall -std=c99 -o /out/foo /in/foo.c -lm- C++14
g++ -O2 -Wall -std=c++14 -o /out/foo /in/foo.cc -lm- C++17
g++ -O2 -Wall -std=c++17 -o /out/foo /in/foo.cc -lm- Python 3
python3 foo.py
限制
TopsCoding 评测机使用进程的CPU时间计算时间消耗,时间的限定为题目中评测点所指定的时间。
TopsCoding评测机使用进程虚拟内存与物理内存总和计算内存空间消耗。内存空间默认限定为256MiB,题目中特别指明的,限定为题目中评测点所指定的内存空间。
我们在多个服务器上部署了多台评测机,由于各服务器环境可能存在不同(尤其是 gcc 版本不同),因此可能会发生同一份代码在多次提交时,评测结果不一致的情况:
- 两次提交,一次超时,一次不超时:这往往是由于您的代码运行时间卡在超时的边界上,而评测机服务器的性能是存在波动的。发生这种情况属于正常现象,如果您觉得您的代码可以卡时间过去,可以联系管理员/老师对您的记录进行重测。
- 两次提交,一次超时,一次报答案错误:对于 C++ 语言,这很可能是由于这两次提交是由不同gcc版本的评测机评测的,其 -O2/-O3 编译优化结果不同。发生这种情况时,往往您的代码中真的发生了死循环的情况,而编译优化将死循环优化掉了,检查您的代码即可。
输入输出
TopsCoding 支持且标准输入输出(控制台输入输出,屏幕输入输出,STD I/O),也支持文件输入输出。
当题目说明(题目开头)要求使用文件操作时,请使用文件输入输出,此时使用标准输入输出会爆零(System Error/Wrong Answer)。
评测状态
- Waiting 评测:评测请求正在等待被评测机抓取
- Fetched 评测:评测请求已被评测机抓取,正在准备开始评测
- Compiling 评测:正在编译中
- Judging 评测:编译成功,正在评测中
- Accepted 通过:程序输出完全正确
- Wrong Answer 不通过:程序输出与标准答案不一致(不包括行末空格以及文件末空行)
- Time Exceeded 不通过:程序运行时间超过了题目限制
- Memory Exceeded 不通过:程序运行内存空间超过了题目限制
- Runtime Error 不通过:程序运行时错误(如数组越界、被零除、运算溢出、栈溢出、无效指针等)
- Compile Error 不通过:编译失败
- System Error 错误:系统错误(如果您遇到此问题,请先检查是否是在题目要求使用文件操作的情况下,你没有使用文件操作并且,如果不是,请及时在讨论区进行反馈,或者联系管理员)
- Canceled 其他:评测被取消
- Unknown Error 其他:未知错误
- Ignored 其他:被忽略
有“成绩取消”字样则说明管理员手动标记此记录为取消,可能违反了服务条款,比如代码被发现与其他用户的代码十分相似。
编译错误
可能有以下情况:
- 1. 提交时选错了编程语言
- 2. Java 的主类名没有使用 "Main"
- 3. 对于 C/C++:见下
- 4. 一般性的编译错误
对 C/C++ 选手的特别提醒:
- 1. __int64 在 GNU C++ 中应写成 long long 类型
- 2. main() 返回值必须定义为 int ,而不是 void
- 3. for 语句中的指标变量 i 将会在如"for (int i = 0...) {...}"语句之后变为无效
- 4. itoa 不是一个通用 ANSI 函数(标准 C/C++ 中无此函数)
- 5. printf 中使用 %lf 格式是不正确的
训练
我们精心挑选了一些题目组成了训练计划。单击导航栏的“训练”即可进入!
比赛
按照赛制不同,有不同的提交、排名规则:
| 赛制/特性 | OI | Loose IOI | Strict IOI | 乐多 | ACM/ICPC | MON |
|---|---|---|---|---|---|---|
| 比赛中有无罚时 | 无 | 无 | 无 | 按提交次数衰减 | 20min/次 | 无 |
| 查看自己提交记录 | 比赛结束后 | 比赛中即可 | 比赛中即可 | 比赛中即可 | 比赛中即可 | 比赛结束后 |
| 查看实时成绩表 | 比赛结束后 | 比赛开始后 | 比赛结束后 | 比赛结束后 | 封榜前公开,封榜后隐藏 | 比赛结束后 |
| 查看具体测试点详情 | 比赛结束后 | 比赛中 | 比赛中 | 比赛中 | 比赛中 | 比赛结束后 |
| 计分方式 | 最后一次提交 | 最后一次提交 | 最高分提交 | 最高折算分提交 | AC 数 + 罚时 | 最后一次提交 |
| 排名方式 | 总分降序+同分并列 | 同 OI 风格 | 同 OI 风格 | 折算总分降序+最后提分时间升序 | AC 数降序+罚时升序 | 同 OI 风格 |
| 成绩表展示 | 每题得分+耗时 | 同 OI 风格 | 同 OI 风格 | 折算分/原始分 | AC标记+罚时标记 | 同 OI 风格 |
| 封榜 | 无 | 无 | 无 | 无 | 默认 1h | 无 |
时间与空间限制以题目说明为准,默认限制参见限制。
通过率
TopsCoding 使用完成数量、点赞数等指标来评价用户水平。通过率的影响极其恶劣,现在 TopsCoding 不提供也不承认通过率。
RP 算法
TopsCoding RP 分为固定 RP 与浮动 RP ,固定 RP 可由活动、比赛等的奖励获得,浮动 RP 由一般性通过题目获得。
浮动 RP 是一个动态的数值,每个用户在每道题上获得的 RP 都不一样,并且未来也不固定(即浮动之意)。
每道题的浮动 RP 由该题通过总人数与该用户通过此题的名次计算得来。
难度算法
TopsCoding 中题目的难度,根据提交数、通过率以及每个提交的提交时间和评测结果,通过算法计算得出。
因此,请注意以下几点:
- 0. 一般地,难度的数值越大,该题目越难。
- 1. 新题目的难度可能不准确;在题目获得大量提交之后,难度才会变得较为准确。
- 2. 越早提交评测的用户代码的评测结果对题目难度影响越大。
- 3. 题目的难度由算法计算得出,有可能出现不准确的结果。
测试数据集格式
可以把各测试点直接压缩为zip的数据包上传,评测机会自动检测文件配置,其他自定义配置规范具体可参见:HydroJudger测试数据包格式规范。
我的文件
可以上传图片、文本、测试数据集压缩包文件,其他类型文件不建议上传。
金币系统
为了鼓励和帮助同学们学习,减少学习过程中的障碍,增加学习的乐趣,我们设计了一种金币的获取和消费机制:
金币的获取方式有以下几种:
- 1. 刷题:在(仅限)主题库中首次对一道题目提交代码通过即可获得金币,金币值基数为题目难度等级(1~10),奖励倍率为 1,首次提交即通过,倍率 +1,以挑战模式通过奖励倍率 +2,奖励可叠加(每道题目仅第一次 AC 时可获得金币),除此之外,每次还会随机额外掉落 0~1.00 的金币,有 1% 的概率掉落 5 金币;
- 2. 比赛中获得好的成绩:开发中......;
- 3. 完成一个主题库中的训练:开发中......;
- 4. 帮助他人解决问题:开发中......。
金币可用于以下几种场景下消费:
- 1. 换取题解:当一道题目实在做不出来时,在该题有题解的情况下,可用来换取该题的题解,需要花掉的金币数量为该题的难度等级(1~10)×10,(×10 意味着你每做对 10 道同等题目,就可以换取一道相应难度的题目的题解);
- 2. 参加比赛:开发中......未来,我们会设计一种比赛机制,参加比赛需要支付一定的参赛费(比如至少 5 个金币),所有选手的参赛费构成奖金池,然后比赛后,根据选手表现,返还一定的金币(有的人赚,有的人亏),以此来提高比赛的刺激性;
- 3. 参与训练:开发中......完成训练是有好处的,对于参加了训练但不不做题的人来说,他最好付出一些成本(押金),当他努力前行,最终完成训练后,他理应获得一些奖励(押金返还+额外金币);
- 4. 悬赏他人帮你解决问题:开发中......有时当你代码实在调不出来,或者学习遇到一些阻碍,可以去问别人,别人没有义务花自己的时间,去解决你的问题,因此,问问题的人要支付一些金币,而最终能回答并解决你问题的人,则可以获得你的酬谢。
- 5. 使用 AI 大模型:帮你调试代码和优化代码。
忘记密码和/或用户名
目前网站没有对外开放注册,如果你想使用本网站,请联系管理员。
如果您无法登录,请仔细想想,是不是用户名或密码记错了。
如果您确信您的账号被盗或者忘记了账号和/或密码,请及时联系老师重置密码或重置密码或找回用户名。

