需要注意的

注意

取模。

开 long long。有没有 #define int long long。

scanf 一般要写 &。

二维的东西,注意不要把 m 写成 n。不要把 m 和 n 弄混。

用 getchar() 读字符需谨慎。可以尝试用 cin。

不要把 += 写成 =。

不要把 b 写成 a。

分清要算 r - l(给两个横坐标,算横向的距离) 还是 r - l + 1(算区间里有多少个点)。

变量要先声明再用。

普通的线段树开 ( 4 倍 + 1 ) 空间即可(因为序列长为 2n1+1 时是极限情况,(2n+(2n1))=4(2n1+1)5<4(2n1+1)),但是不是叶子结点才能下放标记(即不能下放叶子结点上的标记)(有时要判断,如:P3373 【模板】线段树 2)。也可以考虑开 ( 8 倍 + 1 ) 空间,此时可以下放叶子结点上的标记。

倍增时注意数组开到的是多少,枚举的是多少(0~19?)。

注意在 for 循环里是 <= 还是 <,从 0 开始还是从 1 开始。

不要忘了给新开的结点初始化。(创建了就立即初始化)。(尤其是给存 max 和/或 min 的东西初始化)。如:线段树(注意(这个题里不能把 mx 初始化成 - ((int)1e9) 之类的,而应该让其初值为 0):P4556 [Vani有约会] 雨天的尾巴 /【模板】线段树合并)。

注意线段树的范围是 1 到 n 还是其他的。不要习惯性地写就写错了。如:P4556 [Vani有约会] 雨天的尾巴 /【模板】线段树合并。

动态开点线段树开空间时要注意。一般开 (log * 要新开点的操作的次数)(???)。注意有可能一步要操作多次。如:P4556 [Vani有约会] 雨天的尾巴 /【模板】线段树合并。

线段树,不要让叶子结点 PushUp。也可以不管,但要在 PushUp 里特判没有左子结点 且 没有右子节点的情况。

PushUp 时要特判没有左子结点 或 没有右子节点的情况。

https://www.luogu.com.cn/discuss/860700

注意复制之后要彻底地修改。不要把 Split_Value 里的 Split_Value 写成 Split_Size(如:P3369 【模板】普通平衡树(FHQ-Treap 做法))。有两种 DFS 的代码也是这样。

不要忘了给自己写的数据结构初始化。(调用 Init())

不要忘了初始化。

FHQ-Treap 如果用一个结点来维护很多个同一数值的数(对每个结点记一个 cnt),Split_Size(按大小分裂)就可能会出问题(???)(按每个结点只维护一个数,多个同一数值的数用多个结点存的写法的话)。

FHQ-Treap 的 Merge 和 Split_Size 和 Split_Value 里面都是有顺序的。

指数取模。

“CF 多测题不能 memset”——M1ndeveloped

“在CF不能写Hash”——Grimgod

注意结点编号等从 0 开始还是从 1 开始。

注意存边的数组要不要开两倍空间。(无向边(双向边(?)))。

多测要清空。(如果变量、数组等(?)全部在 solve() 里声明就不用清空)(???)。

注意从 0 开始还是从 1 开始。注意是 <= 还是 <。

注意仔细弄好输入。看清输入什么、输入格式是什么。

注意可不可以是负数,可不可以是 0(?)。

怎么算数组之类的占了多少空间?

double 和 long long 哪个大?

注意 sort 后编号可能会变。https://www.luogu.com.cn/discuss/728435
也(?)可以记一下每个点对应的原来的编号。

注意树状数组判 i >= 1。

注意线段树维护的区间(??)是什么。是 1 到 n 还是 1 到 k。

注意树状数组维护的上限是什么。是 n 还是 k。

注意一个东西还是不是原来的它。https://www.luogu.com.cn/discuss/697979

注意遍历顺序。(正/反)。

不要把数据类型搞错。

写 1ll * 。
或者 #define int long long,signed main()。
或者直接开 long long。

指 数 取 模。

区分 p 和 P(都是模数)。不要写混了。尤其是在快速幂中。

在函数内部开的数组里面的值是随机的。——Hanghang
https://www.luogu.com.cn/discuss/815673

cout printf 混用:https://blog.csdn.net/qq_28236309/article/details/52200632


  1. 拉插时把 x 在已知点值的范围内的情况判掉,防止整出负数。
  2. 模数较小的时候可能加了它还是负的,此时[应该先 % 再加](?????)(我不太清楚 C++ 负数 % 的机制)。

2024.11.1


用 1ll 一定要在所有需要用的地方用!

2024.11.2


  1. 我现在的快写输出顶下限的负数可能会出错。因为转成正数就超了。
  2. 注意快读快写只能搞 int 时不要拿来搞 long long。类型要对应。
  3. 开 long long 之类的要开全。
  4. 输入 / / & 输出量很大(比如 1e6)的时候一定要用快读、快写!即使是 long long 也要写。但是 double 之类的还不知道怎么办。qwq

2024.11.4


  1. 多测不能用 memset!

  2. 不要把 m 和 n 弄混!!!(jsh)

  3. min max 里类型要相同(?)(xjy)

  4. 每个函数都写 return!!!(jsh)lr?

  5. struct 内部开东西、开 struct、写函数 空间开销?时间?。(还不懂,待学)

2024.11.6


  1. 一定要赋初值!尤其是往代码里新加了什么东西之后。(lr)
  2. 开 long long 要把相关函数返回值也改成 ll!(jsh)(以及函数的参数!)
  3. 注意求 min、max 的初值赋多少,是 inf 还是 - inf 还是 0,根据要拿去求 min/max 的值的范围。(jsh)(以及 inc 的初值赋 0,mul 的初值赋 1)
  4. (DP 题?)注意统计答案的范围。(jsh)

2024.11.7


  1. [数据类型不同的](?)不要比较!~不要取 min/max!(xjy)
  2. [NOI Linux 2.0](?)下 跑。

2024.11.8


  1. set 要用自己的 lower_bound 而不是外界的。(?)

因为这调用的是 algorithm 库的 lower_bound 不是 set 内置的 lower_bound。 || @Stannum7507 : 我草为啥阿 || @Purslane : 喜报 : set st; auto it=lower_bound(st.beg


  1. 特判完要清零!(jsh)
  2. 无符号 和 有符号 不要比较(???)(czx,xjy,lr)
  3. size 是什么类型?

2024.11.13


  1. SPFA 负环空间要多开:https://www.luogu.com.cn/discuss/859704

2024.11.15


  1. 小心取模(或其他运算)之后比大小。(lr)
  2. 小心结构体里写多个构造函数出现神秘编译错误(我之前貌似写两个构造函数也没出过这个错,非常神秘)。(xwb)

2024.12.14


  1. 小心小模数、小心输入模数(可能小),对逆元的影响。解决方法:放大模数(比如 998244353 变为自己的平方)/(组合数)Lucas 定理。似乎第一种方式有限制(???)(求逆元时(???))。(xwb)

2024.12.17


  1. 小心文件名里的空格导致出问题!!!(?)
  2. 小心最大值要开够,1e18 2e18。(lr)

2025.1.20


  1. 不要乱对循环(sum、prod)边界取模。(xjy)

2025.2.7


  1. 不要误删大括号。尤其是前面那个。
  2. 赋初值!!!比如累加的 res=0
  3. 有的东西不一定单增,不要乱用,可以先排序再用,[比如 σ1](???)。
  4. mint inv2 = (mint(2) ^ (P - 2)), inv6 = (mint(2) ^ (P - 2)); // mint(2), not 2
  5. S-B 树结点上的分数是 a+cb+d,不是 a+bc+d

2025.2.8


  1. 神秘 RE,开大栈空间。(xwb)
  2. define 之后就不要用 define 之前的了。(lr)
  3. 重复define???(lr)
  4. 勿忘 return。
  5. 不要忽视返回值。
  6. (卡常)n 比较小(如 [200](记不清是不是了))时就不要用 NTT 这种大常数的了,暴力展开。([秦九韶算法](???))。(lr 告诉我们的,我没验证对不对

2025.2.11


  1. 全局定义的东西不要和在 main 之类的里面再定义一遍!
  2. 取模之后再 gcd 可能会寄。

2025.2.12


  1. n,m 之类的不要用混。例如线段树的范围。(lr)
  2. 算数据类型要开啥的时候不能只考虑结果,要考虑所有东西。
  3. 值域可能加出去了,超过了原来的值域(超过了给出的数据范围)。(xjy)

2025.2.13


  1. 离散化要带着各种东西一起,比如修改时的东西。

2025.2.14


  1. 快读不要忘了写 if(c == '-')
  2. 快写对负数的处理。
  3. 莫队。// a[++ X], not ++ X
  4. 写 if、for、while 等 打大括号!!!
  5. 分清 q[i].id 和 i。扫描线。莫队。

固定块长会不会出问题啊?(莫队、分块)

手造数据(极限、corner case、……)。不要太信任样例和对拍。检查小样例情况是否完全,尤其是根号分治这种。

测出来某行某列小了不一定是整个数小了,因为位数可能都不同。(?)

[均值不等式](?)要管常数?

总时间慢可能是因为固定块长?

块长真神秘,好像不一定严格按照时间复杂度。(?)

留指甲影响敲键盘?

2025.2.15


  1. 小心强制在线的输入爆 int 之类的。(?)
  2. 不要忘了强制在线。写代码和构造数据、用别人的数据时都要注意有没有强制在线。弄清强制在线要写哪些地方,写上。
  3. 分块啥的也不要忘了初始化。
  4. 小心边界。(分块)
  5. 不要把 ^= 写成 ^。
  6. 别忘了边界取 max、min 啥的。各种地方,直接减的、打标记减的。
inline int QwQ(int i) { return cnt[bel[i]] <= rp[bel[i]] - lp[bel[i]] + 1 ? a[i] : max(a[i] - sub[bel[i]], 1); } // 别忘了取 max
inline int AwA(int i) { return cnt[bel[i]] <= rp[bel[i]] - lp[bel[i]] + 1 ? b[i] : max(b[i] - sub[bel[i]], 1); } // 别忘了取 max
  1. 当你用 QwQ、AwA 这种作为函数名、数组名、变量名时,一定要搞清楚到底是什么含义,不要用错、用混了。
  2. 不要无脑按程序里定义的顺序输入输出!按题目要求!
  3. 注意有没有给树根!!!不要无脑把 1 当成树根!
  4. 用 ((int)g[u].size()) 判叶子结点要考虑是不是根!根没有父结点。
  5. 想清楚、写清楚 DFS 序上的编号和原来的编号!
  6. 看清各种括号。
  7. 分块不要忘了下传标记,包括重构块时!!!虽然有时候重构不用下传。
  8. 小心值炸 int 啥的,取 min、取 max,只要功能一样就行。(实现时的细节)
  9. 大括号,分号。。。
  10. // op[i].x, not i
  11. 判,防止数组越界。
  12. 搞清楚是分开输入还是一起输入的。尤其是 n,m,q 啥的。错的甚至可以过样例(why <- 名)。
  13. 不要交错题了()
  14. ll 之类的,要开够。
  15. 注意编号从 0 还是 1 开始。之类的。转换。
  16. 小心 ++ 放前放后的影响。小心经历 ++(前或后)之后的值到底是多少。
  17. 转换标号!lp[i]
  18. 不要把不是编号的东西误认为编号。
  19. 注意转换编号。dfs 序。
  20. 小心数据结构为空的时候!(?)
  21. 小心数据结构的根设成多少,不要写着写着就变了!(lr)
    • 同时也要注意初值。
  22. 注意初值。
  23. 不要把不同的写法写混了,比如说线段树。
  24. 注意快读快写适用于 int 还是 ll 之类的,不能用就别用,不要无脑用。
  25. 不要无脑复制。不要复制后忘了删或者没发现 不该有的东西。

2025.2.18


  1. 强制在线可能会出神秘错误,可能是因为之前答案算错了。所以强制在线的神秘错误可能其实是 WA。其实不只是强制在线,只要答案对之后有影响的都有可能。(xjy)
  2. 不要因为特殊的输入输出数据而把错误的快读快写当成对的。
  3. 不要忘了写 return ...;
  4. 小心删掉 return 的后果。
  5. return dis[u] + dis[v] - 2 * dis[LCA(u, v)]; // 2 *
dep[1] = 1; // ? //
dis[1] = 0;
DFS(1, 0);
  1. (倍增 LCA)return fa[u][0]; // fa[u][0], not u
  2. 小心固定块长比较长导致样例无法覆盖分块全部情况。
  3. 小心样例无法覆盖全部情况。
  4. 树剖。分清何时用 dfn[u],何时用 u。
  5. 线段树、分块 都要小心 l>r。
  6. 传参顺序不要搞错。
  7. 搞清楚传 x 还是 a[x]。
  8. 重链剖分不要忘 siz[u]+=siz[v],淀粉质不要选(传)错分治中心。
  9. 小心阴险样例——DFS序和编号一样。(xjy)
  10. (树剖)// dfn[tp[u]], dfn[u] 不要写反了!!!!!
  11. 不要把 u,v 搞错了。尤其是主席树 // v, not u
  12. 重链剖分后 DFS 序可能和直接跑的不同!手模时不要搞错了。
  13. 强制在线 // 更新 lstans!!!
  14. 开 -Wshadow!!!小心全局变量和[局部变量](?)重名。(jsh)
  15. 有的东西不用写。
  16. DFS_1、DFS_2、DFS_3 之类的不要调用错了,包括这些里面。还有 Split_Value 和 Split_Size。
  17. 不要忘了调用。(lr)
  18. Base=5201314(???????)
  19. 链式前向星。无向边。空间。
  20. 算空间要注意 ll 之类的。
  21. 取模!开 ll 也可能要取模!(yt)
  22. 本地对,提交 RE:数组越界。(???????)
  23. define 是直接替换吗?
  24. 不懂的东西不要乱用。比如 define。(?)
  25. 不要乱用 memcpy!!!!!!(jsh)
  26. 小心神秘地方开 ll,比如二分 l+r 爆 int。(lr)
  27. 二分出问题可能表现为 TLE。(lr)

2025.2.19


  1. 小心读写(包含快读快写)写挂。

2025.2.21

posted @   huangkxQwQ  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示