低级错误集合

文件错误

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,实际上询问是 3 e 5 3e5 3e5

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下居然正常运行, l i n u x linux linux评测就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),调半天

原因:

  1. 码的时候过于着急
  2. 注重速度的同时没有仔细看自己打的代码(跟着逻辑走)
  3. 没有理解清楚每个变量的含义和之间的关系
  4. 没有仔细检查
    这种错误检查的时候也很难看出来,就算看出来了也很难检查全。
  5. 一些变量设成了全局变量,导致错用一个不在分函数里的变量也没有RE,最终导致了WA/RE/TLE
  6. 变量重复使用

分函数错误

1.传值/址错误

最近写搜索题时新发现的一个问题,数组传值进函数需要用结构体,否则直接f(int res[][])会传址,(即使是另一个函数的局部变量也会改变)

2.没有return

int,long long类函数没有return!不会RE但是会WA


初始化错误

多组数据时没有清空上一轮数据或没有优化清空方式导致TLE


判断错误/算法错误/理解错误

  1. 多层if/else一定要多打大括号!
  2. 斜率优化中的平行于y轴的直线一定要判断是inf还是-inf
  3. 分治递归时原本是:
	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);之后 f y fy fy数组已经改变了!!!


知识点错误

  1. 网络流前向星连边记得初始化 t o t = 1 tot=1 tot=1,这样反边才是   x o r   1 \ xor\ 1  xor 1

注意事项

  1. 一定要先手玩样例无误后再开码
  2. 一定要对拍!
  3. 最后15/10/5分钟不要着急写新的代码,要检查文件名输入输出
  4. 检查的时候顺便在文件里( . i n , . o u t .in,.out .in,.out)输出输出看一下
  5. 为防止 R E RE RE,构造满数据跑一跑
  6. const数组常量最多开两个
  7. 输出所有的数组的sizeof()注意不要MLE
  8. 检查题目中给的数据范围和对应的数组大小
  9. 不同变量取名尽量有区别性(避免惯性使用错误)

你可能感兴趣的:(test)