文件错误
1.文件名打错
2018.10.11
T1:
freopen("forging","r",stdin);
freopen("forging","w",stdout);
看着好像没什么不对??
freopen("forging.in","r",stdin);
freopen("forging.out","w",stdout);
100分惨变0分
总分150惨变50分
rk5惨变rk22
内存错误
1.数组开小
2018.9.21
T1(bzoj5218友好城市):
const int N=155,M=3e5+10,MX=5e4+10;
struct Q{int l,r,id;}qr[MX];
emmm,实际上询问是3e53e53e5
const int N=155,M=3e5+10,MX=5e4+10;
struct Q{int l,r,id;}qr[M];
100分惨变30分
总分190惨变120
rk1惨变rk2
const数组常量最好不要开多个,很容易混淆。
2.赋值错误
2018.10.17
用memcpy把大小为1e5的数组a copy到了nxt大小为15的数组里(Windows下居然正常运行,linuxlinuxlinux评测就RE了)。
memcpy(nxt,a,sizeof(a))
爆int
这类错误几个月前犯的很多。
变量名打错/错用全局变量
2018.10.8
T2:
printf("%d\n",(f[x][m][K]+f[z][m][K])%mod);
emmm,实际上这里应该是上一个y
printf("%d\n",(f[x][m][K]+f[y][m][K])%mod);
i,j打反,顺手数组打错等等。
2019.4.2
rv=atan2(p[x].y,p[x].x);
写成了atan2(y,x),调半天
原因:
- 码的时候过于着急
- 注重速度的同时没有仔细看自己打的代码(跟着逻辑走)
- 没有理解清楚每个变量的含义和之间的关系
- 没有仔细检查
这种错误检查的时候也很难看出来,就算看出来了也很难检查全。 - 一些变量设成了全局变量,导致错用一个不在分函数里的变量也没有RE,最终导致了WA/RE/TLE
- 变量重复使用
分函数错误
1.传值/址错误
最近写搜索题时新发现的一个问题,数组传值进函数需要用结构体,否则直接f(int res[][])会传址,(即使是另一个函数的局部变量也会改变)
2.没有return
int,long long类函数没有return!不会RE但是会WA
初始化错误
多组数据时没有清空上一轮数据或没有优化清空方式导致TLE
判断错误/算法错误/理解错误
- 多层if/else一定要多打大括号!
- 斜率优化中的平行于y轴的直线一定要判断是inf还是-inf
- 分治递归时原本是:
for(i=0;i<ca;++i) reb[L+i]=fz[i];
for(i=0;i<cb;++i) reb[L+ca+i]=fy[i];
sol(l,mid-1,L,L+ca-1);sol(mid+1,r,L+ca,L+ca+cb-1);
错写成了
if(ca){
for(i=0;i<ca;++i) reb[L+i]=fz[i];
sol(l,mid-1,L,L+ca-1);
}
if(cb){
for(i=0;i<cb;++i) reb[L+ca+i]=fy[i];
sol(mid+1,r,L+ca,L+ca+cb-1);
}
然而在sol(l,mid-1,L,L+ca-1);
之后fyfyfy数组已经改变了!!!
知识点错误
- 网络流前向星连边记得初始化tot=1tot=1tot=1,这样反边才是 xor 1\ xor\ 1 xor 1
注意事项
- 一定要先手玩样例无误后再开码
- 一定要对拍!
- 最后15/10/5分钟不要着急写新的代码,要检查文件名输入输出
- 检查的时候顺便在文件里(.in,.out.in,.out.in,.out)输出输出看一下
- 为防止RERERE,构造满数据跑一跑
- const数组常量最多开两个
- 输出所有的数组的sizeof()注意不要MLE
- 检查题目中给的数据范围和对应的数组大小
- 不同变量取名尽量有区别性(避免惯性使用错误)