那年那日的智障错误:修订间差异

添加1,596字节 、​ 2022年3月17日 (星期四)
无编辑摘要
(/kk from crz)
 
无编辑摘要
 
(未显示2个用户的10个中间版本)
第1行:
众所周知,编译器是没有脑子的⑨,所以在编写代码的过程中,总会有一些智障错误被编译器放过去,然后苦逼的 OIer 和程序员就要进行漫长的 debug 过程。
 
而<s>丧心病狂</s>出题人如果给了一个非常水的样例,你甚至不会发现自己的代码有问题,如果你没有进行对拍的情况下,这道题在 ACM/CodeForces 赛制比赛中就会显WA、TLE、RE、MLE甚至是CE{{Heimu|CE(并受到罚时}},), OI 赛制比赛中就会挂分/爆零{{Heimu|论对拍的重要性}}。
 
下面将举几个典型的智障错误例子。(这些错误都是 crz <s>践行</s>过的)
 
下面将举几个典型的智障错误例子。{{Heimu|这些错误大部分都是 crz <s>和hsy践行</s>过的}}
=== 前置知识 ===
在阅读下面内容前,你需要先知道这些东西:
 
关于评测状态:
 
# AC:Accept,程序通过。(绿)
# WA:Wrong Answer,答案错误。(红)
第18行 ⟶ 第16行:
# MLE:Memory Limit Exceeded,超出内存限制。(黑)
# UKE:Unknown Error,出现未知错误。(黑)
一些接下来代码中可能会出现的宏定义/常量:
 
一些接下来代码中可能会出现的宏定义/常量:<syntaxhighlight lang="c++">
#define rg register
#define ll long long
第30行 ⟶ 第28行:
const double pi=acos(-1);
</syntaxhighlight>
=== 会 CE ===
 
# <syntaxhighlight lang="c++">struct edge{
=== 会 CE ===
 
# <syntaxhighlight lang="c++">
struct edge{
int l,r,val;
node(){
第40行 ⟶ 第35行:
}
};
</syntaxhighlight>结构体的构造函数和结构名字对不上。{{Heimu|然鹅,在 GCC 较老的版本(特指 Dev-C++)中这个不会 CE。}} {{Heimu|)(但是 NOI GCC 和某些 OJ 上的 Clang 并不认,交上去还是会 CE。}} {{Heimu|所以 Dev-C++ 背锅!}}
# <syntaxhighlight lang="c++">
struct node{
第49行 ⟶ 第44行:
return 1;
}
 
</syntaxhighlight>你并不能在结构体外这样重载运算符。
# <syntaxhighlight lang="c++">
第64行 ⟶ 第58行:
return 0;
}
</syntaxhighlight>所以,在这里倡导大家多使用 <code>signed main</code> 代替 <code>int main</code>。
=== 会 RE ===
# 待补充
 
=== 会 RE ===
 
# <syntaxhighlight lang="c++">
int f[21][maxn];
第77行 ⟶ 第68行:
}
}
 
</syntaxhighlight>你的倍增数组的倍增维在第一维还是第二维?
# 你的代码中有各类 [https://baike.baidu.com/item/%E6%9C%AA%E5%AE%9A%E4%B9%89%E8%A1%8C%E4%B8%BA UB] 行为,这些本来不会有大问题,然鹅你开了 O2。
# 你的线段树 <code>build</code> 了吗?
# 你的平衡树插了 <code>inf</code> <code>-inf</code> 防止越界了吗?(如果是 fhq-Treap 当我没说)
# <syntaxhighlight lang="c++">
# 待补充。
void work(int mid){
 
for(rg int i=1;i<=n;++i){
=== 会 TLE ===
while(front!=rear&&slope(q[front],q[front+1])<sum[i]) ++front;
 
//do somethings.
=== 会 MLE ===
while(front!=rear&&slope(q[rear-1],q[i])>slope(q[rear-1],q[rear])) ++rear;
 
//do somethings.
=== 会 WA ===
}
 
}
=== 会注释 ===
</syntaxhighlight>你的(单调)队列 <code>push</code> 和 <code>pop</code> 的时候分清 <code>++</code> 和 <code>--</code> 了吗?
<references />
# <syntaxhighlight lang="c++">
signed XXX(){
//do something,but return nothing.
}
</syntaxhighlight>Windows 环境下感觉良好,Linux 环境下不开 O2 依然感觉良好,开了 O2 后 mmp。(问题是这玩意一旦写出来本地基本查不出来){{Heimu|心理:tnnd 为什么不 RE!}}
# <syntaxhighlight lang="c++">
const int N=100005;
int rev[N],lgn,len;
int A[N],B[N],C[N];
void NTT(int* F,const int len,const int opt){
//......
}
</syntaxhighlight> NTT/FFT 的数组 tm 要开四倍。
=== 会 TLE ===
# <s>zz の jb</s> 火车头并不能拯救一切常数问题。
=== 会 MLE ===
=== 会 WA ===
# 您审题了吗?
# 写珂朵莉树等用到 <code>std::set</code> 或 <code>std::map</code> 的场合时:<syntaxhighlight lang="c++">
struct edgenode{
int l,r; mutable int v;
node(int l=0,int r=0,int v=0):l(l),r(r),v(v) {}
inline bool operator<(const node& _)const{ return l<_.l; }
};
set<node> t;
int XXX(){
int ret=0;
for(set<node>::iterator i=t.begin();i!=t.end();++i){
//do somthing.
t.erase(i);
}
return ret;
}
</syntaxhighlight> <code>std::set</code> 和 <code>std::map</code> 内部实现都基于红黑树,插入和删除时树的结构都会发生变化,结束就是迭代器失效。{{Heimu|别 tm 为了卡一点常数边遍历边修改!}}
{{Study}}
[[分类:信息学]]