防爆零指南

· · 算法·理论

编写代码

  1. 文件路径使用正斜杠 “/”

    Linux 系统使用正斜杠 “/” 作为路径分隔符,而不是 Windows 中的反斜杠 “\”。如果你使用了万能头文件或其他扩展库,注意不要写错。例如,bits/stdc++.h 不要误写成 bits\stdc++.h。

  2. 避免使用系统保留名称作为变量名

    Linux 下的 g++ 库中会使用一些特定名称(如 kill、hash 等),如果你的程序中也使用了这些名称,可能导致变量名或函数名冲突。由于这类名称没有固定规律,靠“黑名单”记忆难度较大。

    一个简单有效的方法:将所有变量名的首字母大写。 虽然写起来稍显别扭,但能有效避免冲突。当然,像 i、j、k 这类常用循环变量肯定是没有问题。

    另外,如果你平时训练的 OJ 系统像 xmoj 一样符合 NOI Linux 环境要求,那么日常使用的变量名基本可以沿用,只需对不确定的变量做首字母大写处理即可。

  3. 注意 C++ 标准版本

    g++ 9.3.0 虽然可以通过编译选项支持 C++17,但实际评测时使用的是 C++14。建议同学们不要过度追求新版本的语法便利,日常训练中尽量使用比赛规定的标准版本。

  4. 局部变量不会自动初始化

    这一点非常关键:在 NOI Linux 系统中,局部变量不会自动初始化为 0。务必记得对局部变量进行手动初始化。虽然这不是编译问题,但确实是一个可能导致“爆零”的严重错误。

  5. 有返回值的函数必须全覆盖 return

    自定义函数在所有执行路径上都必须有 return 语句,否则可能引发运行时错误。

    (我去年因为这个炸过来着)

存储文件