OI 易错合集

随机思绪,想到哪写到哪。

部分参考 OI-Wiki 和我自己 UnAC 记录。

Wrong Answer

  1. 忘开 long long
  2. 多测不清空
  3. == 误写成 =
  4. 数据不初始化
    比如:初始化为正无穷、负无穷、0、1、-1
  5. 读入字符类型读到了分隔符 / 空格 / 换行
    建议:ch = getchar(); while(!<ch is valid>) { ch = getchar(); }
  6. 二分 mid 爆数据上限
    建议:int mid = left + (right - left) / 2
  7. 位运算符优先级问题
    如错误写法:left + (right - left) >> 1,正确应该用 left + ((right - left) >> 1)
  8. printf 写成 scanf
    原文如此
  9. 宏定义缺少括号包裹导致优先级出现问题
  10. 全局变量被局部变量覆盖导致失效
  11. 多输出空行
  12. 浮点数输出 NaN
    常见:二分变量 ans 未初始化

Runtime Error

  1. 数组开小
    如双向边不开二倍,线段树 / 树状数组不开四倍,二维结构开小 / 开大
  2. void 函数无返回值(如不开 O2 则可能是 WA)
  3. 除以零
  4. std::sort() 自定义排序函数 / 重载运算符出现冲突
    即对于两个元素多次询问返回不同结果,常出现于多关键字排序没写全
  5. 栈 / 队列为空仍尝试弹出

Time Limit Exceeded

  1. for 语句起止条件写错
  2. for 变量名互串
  3. 无限 DFS / BFS
  4. 输入写多一直在等待输入
  5. 某些操作常数爆炸

Memory Limit Exceeded

  1. 无限 DFS / 迭代爆栈
  2. 开大 std:string 数组
  3. 无限向 STL 容器添加数据

Compile Error

  1. 与其他标识符重名
    常见的有:sizenexttimelockdataleftright 开作全局数组
  2. INT_MAXLLONG_MAX 等需要 #include <climit>
    见:数值极限 - cppreference.com
  3. min()max() 两个参数不是同一个数据类型。

此作品(OI 易错合集)基于 CC-BY-NC-SA 4.0 协议授权。

转载请注明来源:作者:CodeZhangBorui,链接:https://codezhangborui.com/2024/11/oi-common-problems-collection/

暂无评论

发送评论 编辑评论


				
上一篇
下一篇