欢迎来到 CBOJ!这里整理了判题状态含义、语言注意事项、以及「代码人道主义」的放宽规则。
如果您还有要问的,或者系统出现问题,请联系管理员 CB-X2-Jun,邮箱 cbx2jun@cc.cc(不一定会看),洛谷 UID 1219707,GitHub 为 CB-X2-Jun。
我们欢迎您加入官方 QQ 群,群号 784244286。
你的提交会经过评测系统,最终显示以下状态之一:
部分语言对代码结构有特殊要求,请按照以下规范提交:
| 语言 | 要求 |
|---|---|
| Java 8 / 11 / 17 / 21 | 类名必须是 Main,包含 public static void main(String[] args) |
| Kotlin JVM | 必须定义顶层 fun main(args: Array<String>) 或 fun main() |
| Scala | 必须定义 object Main { def main(args: Array[String]): Unit = ... } |
| Ceylon | 必须使用 shared void run() |
| Eiffel | 必须 class MAIN、create make、feature make |
| Erlang | 必须 -module(main).、-export([start/0]).、start() -> ... |
| Prolog | 必须定义 main 谓词,例如 :- initialization(main). main :- ... |
| Go | 必须 package main 和 func main() |
| Rust | 必须 fn main() |
| Haskell | 必须 main = ... |
| Pascal | 建议 program Main; begin ... end.(可任意命名) |
| Ada | 建议 procedure Main is ...(可任意命名) |
| Fortran | 建议 program main(可任意命名) |
| D | 必须 void main() |
| Dart | 必须 void main() |
| B | 必须 main(),且 B 标准库不太对劲,只能使用类似 extrn printf; 的方式使用 C 标准库 |
| Zig |
入口函数:pub fn main(init: std.process.Init) !void (Zig 0.16.0 及更新版本)。输出必须使用 std.Io.File.stdout(),例如:
try std.Io.File.stdout().writeStreamingAll(init.io, "Hello, World!\n");绝对不要使用 std.debug.print,因为它输出到 stderr,OJ 只比对 stdout,会导致 Wrong Answer。
|
| Agda |
必须定义 main : IO ⊤。Agda 通过 MAlonzo 后端编译为 Haskell 再交给 GHC 编译执行,因此有以下几处坑:① IO 原语需要手动 postulate:Agda.Builtin.IO 只提供 IO 类型,不导出 getLine、putStrLn、_>>=_,必须自行声明并用 {-# COMPILE GHC ... #-} 绑定到 Haskell:
postulate
getLine : IO String
putStrLn : String → IO ⊤
_>>=_ : ∀ {A B : Set} → IO A → (A → IO B) → IO B
{-# FOREIGN GHC import qualified Data.Text.IO as T #-}
{-# COMPILE GHC getLine = T.getLine #-}
{-# COMPILE GHC putStrLn = T.putStrLn #-}
{-# COMPILE GHC _>>=_ = \_ _ m f -> m >>= f #-}
② _>>=_ 不能直接写成 (>>=):前两个参数是隐式类型参数,必须写成 \_ _ m f -> m >>= f,否则 MAlonzo 生成的 Haskell 会因类型不匹配而编译失败(报错形如 (>>=) is applied to too few arguments)。③ 终止检查:递归函数必须直接对归纳类型的结构子项做模式匹配(如 (x ∷ xs)),不能在递归调用里用 tailOrNil xs、headOrZero xs 这类辅助函数,否则 Agda 会报 Termination checking failed。④ 字符串与字符: primStringToList / primStringFromList 在 Agda.Builtin.String;字符与自然数互转用 primCharToNat / primNatToChar。
|
| Thue / Thue with l |
无需特殊入口,直接提交规则 + 初始状态。规则终止行为单独一行的 ::=。Thue:默认非确定性模式,每次随机选择可应用的规则(符合 Thue 语言原意)。Thue with l:确定性左到右模式,同一份代码每次运行结果一致,适合调试和需要可复现的场景。⚠️ 本实现限制:单条规则左右各最多 63 字符,规则总数最多 128 条,状态空间最多 16KB。 |
| C / C++ | int main() 或 int main(void) |
| C# |
必须包含 class Program { static void Main(string[] args) { ... } } 或 static void Main()
|
| F# |
需包含 [<EntryPoint>] let main argv = ...,或也可以使用 printfn 等顶层代码(但建议显式入口点)
|
| Objective-C / Objective-C++ |
必须包含入口点 int main(int argc, char *argv[]) 或 int main(void),与 C/C++ 相同
|
| Swift |
无需显式 main 函数,直接写顶层代码(如 print("string xxxx"))即可。也可以使用 @main 属性标记结构体,但 OJ 中推荐直接写顶层代码
|
| Icon |
必须 procedure main() |
| Scheme (Guile) |
无需特殊入口,直接执行 (display "Hello, World!") 等。 |
| R |
无需特殊入口,直接执行 cat("Hello, World!\n") 等。 |
| Forth |
无需特殊入口,直接执行,但必须加上 bye 使程序即刻退出,否则会输出版权与帮助信息,导致 WA
|
| Python 3 / PyPy3 | 无需特殊入口,直接执行 print 等 |
| Ruby / PHP / Lua / Perl / Tcl / Bash | 无需特殊入口,直接执行 |
| JavaScript / TypeScript / LiveScript | 无需特殊入口,直接执行 console.log 等 |
| Brainfuck / Fish / Befunge | 无需特殊入口,直接执行代码 |
| BASIC (Yabasic) | 无需特殊入口,直接执行 PRINT 等 |
| Lisp / Common Lisp | 无需特殊入口,直接执行 (format t ...) 等 |
| Elixir | 无需特殊入口,直接执行 IO.puts 等 |
| Clojure | 无需特殊入口,直接执行 (println ...) 等 |
| Julia / Groovy | 无需特殊入口,直接执行 println 等 |
| OCaml | 无需特殊入口,直接执行 print_endline 等 |
| Nim | 无需特殊入口,直接执行 echo 等 |
我们理解不同语言的启动开销和运行特性不同。为了让每种语言都能公平竞技,CBOJ 为以下语言设置了更宽松的时间限制和内存限制。
以下倍率适用于所有题目,实际时限 = 题目时限 × 时间倍率,实际内存 = 题目的存限制 × 内存倍率。
| 语言 | 时间倍率 | 1000ms 时限 → 实际 (ms) | 内存倍率 | 256MB 限制 → 实际 (MB) |
|---|---|---|---|---|
| C / C++ | 1.0 | 1000 | 1 | 256 |
| Pascal / Fortran / Ada / D | 1.0 | 1000 | 1 | 256 |
| Python 3 | 1.5 | 1500 | 1 | 256 |
| PyPy 3 | 2.0 | 2000 | 1 | 256 |
| Java 8 / 11 / 17 / 21 | 2.0 | 2000 | 5 | 1280 |
| Kotlin JVM | 2.0 | 2000 | 5 | 1280 |
| Scala | 2.0 | 2000 | 5 | 1280 |
| Ceylon | 2.0 | 2000 | 5 | 1280 |
| Clojure | 5.0 | 5000 | 5 | 1280 |
| Groovy | 5.0 | 5000 | 5 | 1280 |
| Erlang | 3.0 | 3000 | 3 | 768 |
| Elixir | 2.0 | 2000 | 3 | 768 |
| Julia | 1.5 | 1500 | 8 | 2048 |
| Haskell / Agda | 1.5 | 1500 | 3 | 768 |
| Swift | 1.2 | 1200 | 3 | 768 |
| Rust / Go | 1.0 | 1000 | 1 | 256 |
| 其他语言 | 1.0 | 1000 | 1 | 256 |
A: 最常见的原因是 入口点不符合要求。请对照上方的“语言注意事项”检查你的代码结构。
例如 Java 必须用 public class Main,Ceylon 必须用 shared void run()。
A: Erlang 的 BEAM VM 和 Clojure 的 JVM 启动本身就有较大开销。 我们已为这些语言设置了“人道主义”倍率,请放心提交。
A: 由于 CBOJ 的评测在 GitHub Actions 上运行,提交后可能需要排队等待 Runner 分配。 如果超过 5 分钟仍为 Pending,可能是评测机出现异常,请联系管理员。
A: 通常表示评测系统内部出现了问题(如 GitHub Actions 触发失败、数据库写入异常等)。 如果遇到,建议稍后重新提交,或联系管理员排查。
A: 你可以查看其他人的提交记录,但只能看到测试点详情,无法查看源代码。 只有你自己和管理员能看到你的完整代码。
CBOJ 是一个由爱好者维护的在线评测系统,如有问题请反馈。
本页最后更新:2026-08-25