- 你的数组越界了,你的数组越界了,你的数组越界了!一些隐藏的数组越界可能在本地不会报错,而到了 OJ 上由于运行环境发生了变化,才发生错误。数组越界不仅可能导致运行错误,也可能导致答案错误或超时等,这是由于数组越界干扰了其他内存导致的。
- 局部变量尽可能设初值!原理同上。某些实现较好的编译器会帮你自动加上初值,但是大多数情况下(包括 OJ 的编译器)不会。
- 本 OJ 已经禁用
#pragma GCC optimize
等强制打开编译器优化的技巧,提交此类代码会出现编译错误。 - 不要使用
gets
等读取一行,因为这些函数使用换行符来判断行结束(当然也不要手动判断换行符)。Windows 下换行符是\r\n
,而 Linux 下换行符是\n
。假设此题的数据是在 Windows 下生成的,那么它的换行符是\r\n
,而 OJ 上的程序是在 Linux 下编译的,读取的换行符是\n
,这样就会导致字符串的最后多出一个\r
。 - 请记得使用
%lld
而非%I64d
。 - 如果出现了编译错误,记得旧版 g++ 编译器(比如 Dev-C++ 自带的)不需要引入
<cstring>
或<cstdio>
等,而 OJ 上的 g++ 需要。 - 如果你内存超限了,记住 OJ 是 64 位系统,指针占 8 字节内存。
- 你的程序可能有精度等其他问题。
- 如果很多人都挂了,也可能是 SPJ 由于上述原因挂了。
FAQ: 为什么我的程序在本地跑没事,交到你的 OJ 上就挂了(ノ=Д=)ノ┻━┻
![](https://img-home.csdnimg.cn/images/20240711042549.png)