代码错误原因分析
永远注意符号,变量名的错误
永远注意多测清空
小心数组开小,数组开小是变化之神
不要卡着极限的数据开数组,最好保险多开 \(5\) 或是 \(10\)
Arcka 是代码之神,她基本不会写出任何错误
TLE / 死循环
斜体表示可能造成死循环
- memeset 清空
- for 循环变量写错
如:
for(int i = 1; i <= n; ++ i){
for(int j = 1; j <= n; ++ i){
}
}
- while 退出边界错误
- 二分中 \(l, r\) 求法错误
如:
while(l <= r){
int mid = (l + r) >> 1;
if(check(mid)) l = mid;
else r = mid;
} //当 l = 3, r = 4 且 check() 一直返回 true 时会发生死循环
- 数组开小
- string 使用错误
string c;
char a[N];
for(int i = 1; i <= n; ++i){
c = c + a[i]; //这样会把时间拉满,估计 O(n^2) 的复杂度
c += a[i]; //这样才 O(n)
}
估计是因为 c = c + a[i]
时的本质是将 string 清空然后重新赋值,导致复杂度超炸
CE
……
当发现玄学CE且无法调出时,尽量快速换写法,莫浪费时间
RE
- 访问越界(数组开小-注意数组下标为从 \(0\) 开始)
- 除以 \(0\)
MLE
- 数组开大
- 数组开小
开 \(O_2\) AC ,不开 WA
数组开小(估计是 \(O_2\) 放大空间的关系)