注意事项

写题原则:
看题解还不懂的题不要内耗,自己手动模拟
有错误先分析错因,再针对调试

代码能力与速度!!!写代码一定要注意细节有没有写错,尤其是变量不要弄错。

  1. 静态查错一定要认真思考正反细节比如 \(<\) 还是 \(>\),注意输出中间变量,根据输出错误答案猜错因。检查数组 maxs maxn 是否写反。不要觉得看着顺眼/对称就觉得自己是对的,比如线段树合并的是 ls(u) ls(v) 而不是 ls(u) rs(v)。检查的时候可能看着 ls rs 对称就跳过去了。

  2. 看完题解后不要看题解代码,按照自己理解写,如果要看题解代码的话一定要仔细看别漏。

  3. 对拍>静态查错,如果小样例出错,先输出中间过程。

  4. 写代码一定要专注,思考每一步的正确性,注意细节,不要犯低级错误。不可着急去写,要想清楚细节。写的哪怕慢一点也要把结构格式等等写好,方便调试。

  5. 思考题目注意寻找关键切入点,或者思考题面涉及知识点的相关性质,往可行方案上靠近,切勿盲目思考。

  6. 注意数据范围,如开不开 long long 或 maxn 大小。

  7. 检查的时候一定要造特判的样例测试一下,比如别忘记在特判输出里面换行。

  8. 注意用眼,不思考时合上电脑,眺望远方。

  9. 调试一定要小心,不要不小心改掉了之前的代码

  10. 一定要把式子完整列出来,不能空想。

  11. 不要因为点小就开小数组,可能会有点大的特殊性质。

  12. 审题,第 K OR 第 K

  13. 统一形式,多合并相同操作,避免混乱。

  14. 一定要认真思考对后面有没有影响,或者模拟出过程,不可大概想想。

  15. 一定要注意看输入格式,或者特殊性质。如 CF314E 题目中给大小写,实则输入只是小写。

  16. 如果看不懂题解操作,可以自己按题解思路想一下代码,看看实现那个缺什么,缺少的部分就是题解里看不懂的地方。

  17. 如果看题解一定要认真仔细看,不要漏关键信息。

  18. 并查集递归可能炸,可以考虑循环写。

  19. 一定不能忘记判断边界会不会超,可以自己测试极端样例。如 P7960 [NOIP2021] 报数

  20. \(\operatorname{set}\) 里面一定要用 s.lower_bound 而非 lower_bound,否则复杂度可能会退化成 \(O(n)\)

  21. P3177 [HAOI2015] 树上染色 注意是加的时候是双向贡献加,减的时候就别忘记除以2,才能保证不被多加。计数的时候可以构造很小的样例自己多试一试。

  22. 虚拟机上写代码一定要小心,很多错误不报错。比如结构体不命名。函数无返回值

  23. 注意题目运行时间,不是 \(1s\)

  24. 打擂台法判断最值,记得赋初始值,防止最后没打擂台就结束了。如:P2196

  25. define 不保证内部运算先算 AT_arc100_b [ABC102D] Equal Cut

  26. 位运算优先级比等号低!

  27. 注意 \(calc(u,v)\) 不可用 \(sz\) 替代,因为无法确保先传 \(sz\) 还是先调用 \(find\) 函数。函数传参一定要小心,注意几个参数之间是否互相关联。

    solve(find(v,u),calc(v,u)); 
    
  28. 注意按照我的线段树写法下传区间的时候依然是 \((l,r)\)

  29. 多测不要乱 \(memset\)

    for(int i=1;i<=n;i++) c[a[i]]=0;
    
  30. 维护最大和次大值的时候,如果当前值等于最大值也要更新,因为这样会引起次大值的变大。

  31. lld

  32. 莫队先减后加

  33. 如果一个地方代码修改,注意与之关联的位置代码也要改。

  34. 注意弄清树状数组维护的是什么,如果是值域的话,那么更新的上限一直要更新到最大值而非最大下标。

  35. 如果出现负数需要平移的情况,别忘记数组开两倍

  36. 多测判断对错,需要等数据输入完再输出 No 并推出,否则会影响下一组

  37. P1025 [NOIP2001 提高组] 数的划分 注意记忆化搜索刻画状态的完全性。本题还需要加上前驱的状态。

  38. 不能用 1 直接左移 \(60\) 位,应该用 1ll。

  39. 注意各个变量名,不要搞错了

  40. int大数相乘注意开long long

  41. 移动溢出后,按位 \(1\) 结果是 \(1\)。小心!

  42. 交换 map 是 \(O(1)\) 的。

  43. 写完一段代码,想给 cpp 文件改名的时候注意先保存当前代码,否则改名后就自动不保存。

  44. 注意如果映射了值,在其他地方别忘了继续映射

  45. 快读变量名 x f 不要冲突,记得赋值 x=0 f=1

  46. 贪心匹配的题目开集合注意要开 muliset。小心不要全部删除了,要删迭代器。

  47. 不能一边用迭代器访问一边删除集合内元素会造成混乱。

  48. 取集合末尾元素,--s.end() 而不是 s.end()--

  49. f[i]=max(f[i],f[g[j]]+(a[i]&a[g[j]])); 位运算要打括号!!!

  50. 注意输入的数中有无 long long s/p lld 开long long

  51. if 条件判断 见寒假模拟赛4总结

  52. 随机树的树高为 \(\log n\),所以对于随机树暴力从一点到另一点复杂夫为 \(O(\log n)\)

  53. 如果卡常,多组数据输入的 \(n\)\(m\) 记得也不能用普通 cin,因为可能 T 很大。

  54. 如果要一边 dfs 一边判断祖先的话需要判断 dfn 大小而非是否有过,因为可能会出现儿子节点遍历过某个点后,\(u\) 又枚举到了这个点

  55. 如果线段树右节点的信息依赖于左节点目前的信息,那么就需要先下传右节点,防止左节点信息更新后改变。

  56. 一定要小心检查各个特判的地方。尤其是考试结束前,统一检查一遍,测一下样例。

  57. K-=sz[ch[u][bit]],u=ch[u][bit^1]; 一定要注意先后顺序,\(u\) 变了之后减的值就变了。

  58. P10217 [省选联考 2024] 季风 一定不要想复杂了,有相同形式的操作合并即可,而且本题绝对值不需要讨论可以直接去,有的时候需要观察性质。

  59. 无论是文化课还是 oi ,都要注意如果发现一个地方计算或者代码有问题需要更改的时候,注意与之牵连的部分也要更改。

  60. 扩展域并查集记得初始化不止 \(n\),应该是 \(k\times n\)

  61. 小心给出的是森林或者不连通图,或者自己图论建模,建出来的不连通

  62. 决策单调性的题目,如果有 double,但是答案要求取整,决策中的 \(f_i\) 不能取整,否则会破坏单调性质。

  63. 做除法的时候注意取整,是向上还是向下。如果是向上可以 \(\frac{a-1}{b}+1\)

  64. 写完程序尤其是出现问题时一定要自己完整小心检查一下小地方,一定要细致检查不可一带而过

  65. ll 的时候 inf 0x3f 注意也要开 ll

  66. 如果循环最后还有一个对于所有情况的处理,不可随便 continue 这样就处理不了最下面的那个更新了。

  67. 题目不一定升序给出 \(a_i\)

  68. 扫描线可能无法扫到全局,需要特判

  69. for(int j=i;j>=1;j--) b[j]-=b[1]; 必须倒着减,否则 \(b_1\) 会改变

  70. 如果到终点必须停止的话,在可达性统计中不能将终点压入队列,最短路中从队列中取出终点也不能扩展。

  71. 如果题目中有到达某个点可以使用某条件但是限制使用次数的话,能使用的时候注意不一定使用。

  72. 一个信息如果要被重复用到的时候,注意不要着急修改。

  73. CF1214H Tiles Placement 注意判断是否存在三链共点且两两之和 \(\ge k\) 的时候,不能只看链长是否大于,还需要看看是否有链防止出现 \(0+k \ge k\) 的情况。并且注意由于此时链返回的长度包含根节点,所以注意需要判断的是 \(\neq 1\) 而不是 \(0\)

  74. 注意有的时候为了方便处理,有的要求或者值不一定要代入化简式,可能原式更方便。

  75. 计数问题的边界情况不止是应该考虑数组下标 \(<0\) 的事情,还应该从实际意义角度出发,也就是说有的时候不是因为状态本身不合法,而是从状态 \(A\) 到 状态 \(B\) 这个过程不合法。比如 ABC134F Permutation Oddness\(j\)\(0\) 的时候,无法向前匹配。还有增加匹配。还有就是如果使用了前面的状态需要对其限制,比如本来 \((i,j)\) 只需要满足 \(i \le j\),但是要是转移途中用到 \((i-1,j+1)\) 就需要 \(i-1 \le j+1\)

  76. 注意优化可行性,P8376 [APIO2022] 排列 中虽然我将贡献式子从 \(2^j(2-1)\) 优化到了 \(2^j(2^i-1)\),但是实际上之前对于 \(k\) 卡得很紧,所以 \(i\) 只能取 \(1\),故优化无效。

  77. 每用到一个新变量就要把初始化或者清零之类的先写好,防止后面忘记。

  78. 注意调用的函数的时候传入了一个 K,后续用到函数参数的时候别用 K,而是用对应的参数名。

  79. 动态开点一定要考虑空空节点,还可能有一个点开了左边但是没开右边。

  80. KDT 节点对应数组需要用 \(id(u)\)

  81. 求凸包,输入 \(n\) 未必是点集大小,要在去重之后重新统计

  82. 计算几何一定不要用 = 或者 map 判断相等

  83. 取模情况一下除法一定要记得逆元

  84. 取模树状数组如果有加上负数操作,一定不要忘记 \(+mod\)

  85. 不要什么大小都无脑 \(n\)

  86. 点分治不要忘记统计重心点。

  87. cdq分治优化 dp 注意转移下标要用 a[i].id

  88. cout<<(ans^1)<<endl; 如果不打括号会报错,^ 和 << 引起歧义。

  89. 函数调用别忘记写函数名,编译器不报错。

  90. 平面只要判断两个相对方向,左上和右下的时候不需要二维数点,CF1379F1 Chess Strikes Back (easy version)。只需要记录单维度的最大最小值即可。

  91. 不要重复用定义变量。

  92. memcpy 注意必须类型相同。

  93. 当值域出现负数,最小值不要设 \(0\)

  94. 造成连续多个并列 if 的时候,如果前一个 if 里面的执行语句会造成后面判断条件里的变量改变,那么要用 else if

  95. 如果下标域里面有 \(0\),那么树状数组无法正常运行,可以考虑整体下标加一,注意初始化的时候要初始到 \(n+1\)

  96. 多测,后缀和数组一定要记得对 \(n+1\)\(0\),否则 \(suf_{n+1}\) 可能不为 \(0\)

  97. 读题一定要仔细,有些全局约束或者保证可能放在最下面的测试点数据栏下面。

  98. 改了程序,再运行,一定要先编译。

  99. \(n,m\) 不要打反。

  100. 码量题注意速度。

  101. 要小心如果这么枚举子集不会枚举到空集 for(int i=s;i;i=(i-1)&s)

  102. 如果要借鉴题解写法,一定先要记录下有哪里常用习惯自己和题解不一样,防止后面写错。

  103. \(\operatorname{double}\) 类的最值不要用 0x3f 之类的。

  104. 整数除法别忘记开 \(\operatorname{double}\)

  105. 如果统计答案在循环内部,注意可能有边界条件使得不进入循环,要在初始化的时候就统计答案。

  106. 注意函数传参顺序是否正确,还有结构体传入变量顺序是否正确。一定要在每次传入的时候去原位置看一下是否对应。

  107. 右移多位是 UB 行为。

  108. 不要重复定义变量。

  109. 字符串题记得多测一定要清空 \(s_0~s_{n+1}\)

  110. const double pi=acos(-1.0); 类型不要写错

  111. 线段树修改和询问的时候一定要小心 \(ql>qr\) 的情况,因为在有的时候某个东西无意义,我们按照常理赋值后传入会导致 \(ql>qr\)

  112. ql=queryg(0,L,R); qr=queryf(0,L,R); 一定要先开其他变量记录,不能用 L,R,否则后续 L 改变导致第二个询问出错。

  113. 权值线段树一定要考虑有无 \(0\) 出现。异或可能出现 \(0\)

  114. 如果二分值域里面有 \(0\),小心 check 函数里面的除法。

  115. (V<<2)+10,一定要打括号。

  116. if(n%2==1&&(k<n+m-2||k>=n*m)){ cout<<"NIE"<<endl; return 0; }
    if(n%2==0&&(k<n+m-1||k>=n*m)){ cout<<"NIE"<<endl; return 0; }
    

    注意这个条件判断的写法,不能写 else 然后不判断 \(n \bmod 2=0\),因为可能不满足的是第二个条件。类似 if 要注意。

  117. 贪心/最优化问题对于结构体排序一定要想如何第一关键字相同,怎么排其他关键字。

  118. f[i+L[i]].push_back(i),f[i+R[i]+1].push_back(-i) 像这种下标有加了值得一定要判断是否超出范围 OR 开两倍数组。

  119. fc[j]*fc[k]>fc[i] 哪怕是 long long 也不能随便乘,注意数据可能会爆。应该改用除法。

  120. 位运算的优先级低于等号。

  121. 用快速幂板子小心遇到 \(0\)

  122. 函数返回值类型!!!

  123. 传参注意变量类型

  124. 三分必须是严格单调。

  125. 多测题的特判,一定要等所有数据输入完之后再特判,否则会输入到下一组去。

  126. \(\gcd\) 小心遇到 \(0\)

  127. 删 double 改 int 的时候,一定要注意有没有一个地方这个变量作分母。

  128. 调试的时候如果要注释语句,一定要在代码开头备注,防止最后忘记加上。

  129. 多组询问不要随便改参数。

  130. 交互题记得调用提问函数的结果可能要开 long long。

posted @ 2024-01-17 00:14  Mirasycle  阅读(4)  评论(0编辑  收藏  举报