2020 CSP-S2 & NOIP 2020 考试小错误总结

因为博主是一个退役选手,所以有很多以前记得的细节,现在经常犯错,所以写下来留作复习。

  1. 树链剖分的(dfs2)的时候一定要判断(v)不等于(fa)还有(v)不等于(son[u])才继续走下去dfs2(v,v)

  2. 随机一个东西的时候代码前面一定要加上 srand(time(NULL));(win)机下测的时候要自己写一个大一点的(rnd),在(lin)机下测的时候一定要记得删掉,否则会不断出错。(对拍、随机化、(treap)都需要(rand))。

  3. (clock())返回的是以(ms)为单位的时间,是(double)

  4. 给一个结构体写 a[i]=(dt){read(),read(),read()}; 是正着的,即放进结构体里的东西是和输入同向的;
    给一个函数写 wrk(read(),read(),read()); 是倒着的,即放进函数的东西和输入是反向的。

  5. 快速幂,是 if (b&1) res=1ll*res*a%mod;,并不是判断(a)的奇偶性,而是(b)的。

  6. 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 数组名,就可以显示 数组中所有数据的内容了。

  7. gdb 调试技巧:https://blog.csdn.net/mercy_ps/article/details/81542986 https://blog.csdn.net/qq_23225317/article/details/52757109

  8. 注意linux下的编译成的可执行文件没有后缀(.exe),想运行/打开一个文件的时候写 ./a

  9. 虚树的建树的四种情况分类,其中不能先弹栈再判 (st[pos-1]),要处理完再看弹/不弹栈,弹的话就是(LCA==st[pos-1]),那此时直接将栈顶弹掉就可以了,不弹的话就是 (st[pos]=LCA;)

原文地址:https://www.cnblogs.com/Ronald-MOK1426/p/13912743.html