2020 CSP-S2 & NOIP 2020 考试小错误总结
因为博主是一个退役选手,所以有很多以前记得的细节,现在经常犯错,所以写下来留作复习。
-
树链剖分的\(dfs2\)的时候一定要判断\(v\)不等于\(fa\)还有\(v\)不等于\(son[u]\)才继续走下去
dfs2(v,v)
。 -
随机一个东西的时候代码前面一定要加上
srand(time(NULL));
在\(win\)机下测的时候要自己写一个大一点的\(rnd\),在\(lin\)机下测的时候一定要记得删掉,否则会不断出错。(对拍、随机化、\(treap\)都需要\(rand\))。 -
\(clock()\)返回的是以\(ms\)为单位的时间,是\(double\)。
-
给一个结构体写
a[i]=(dt){read(),read(),read()};
是正着的,即放进结构体里的东西是和输入同向的;
给一个函数写wrk(read(),read(),read());
是倒着的,即放进函数的东西和输入是反向的。 -
快速幂,是
if (b&1) res=1ll*res*a%mod;
,并不是判断\(a\)的奇偶性,而是\(b\)的。 -
gdb 看数组的技巧
有时候,你需要 查看一段连续的内存空间的值。比如 数组的一段,或是动态分配的数据的大小。你可以使用 GDB的“@”操作符,“@”的左边是第一个内存的地址的值,“@”的右边则你你想 查看内存的长度。例如,你的程序中有这样的语句:int *array = (int *) malloc (len * sizeof (int));
于是,在 GDB调试过程中,你可以以如下命令显示出这个动态 数组的取值:
p *array@len
@的左边是 数组的首地址的值,也就是变量array所指向的内容,右边则是数据的长度,其保存在变量len中,其输出结果,大约是下面这个样子的:
( gdb) p *array@len $1 = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40}
如果是静态 数组的话,可以直接用print 数组名,就可以显示 数组中所有数据的内容了。
-
gdb 调试技巧:https://blog.csdn.net/mercy_ps/article/details/81542986 https://blog.csdn.net/qq_23225317/article/details/52757109
-
注意linux下的编译成的可执行文件没有后缀(.exe),想运行/打开一个文件的时候写
./a
-
虚树的建树的四种情况分类,其中不能先弹栈再判 \(st[pos-1]\),要处理完再看弹/不弹栈,弹的话就是\(LCA==st[pos-1]\),那此时直接将栈顶弹掉就可以了,不弹的话就是 \(st[pos]=LCA;\)