需要注意的
注意
取模。
开 long long。有没有 #define int long long。
scanf 一般要写 &。
二维的东西,注意不要把 m 写成 n。不要把 m 和 n 弄混。
用 getchar() 读字符需谨慎。可以尝试用 cin。
不要把 += 写成 =。
不要把 b 写成 a。
分清要算 r - l(给两个横坐标,算横向的距离) 还是 r - l + 1(算区间里有多少个点)。
变量要先声明再用。
普通的线段树开 ( 4 倍 + 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
- 拉插时把
在已知点值的范围内的情况判掉,防止整出负数。 - 模数较小的时候可能加了它还是负的,此时[应该先 % 再加](?????)(我不太清楚 C++ 负数 % 的机制)。
2024.11.1
用 1ll 一定要在所有需要用的地方用!
2024.11.2
- 我现在的快写输出顶下限的负数可能会出错。因为转成正数就超了。
- 注意快读快写只能搞 int 时不要拿来搞 long long。类型要对应。
- 开 long long 之类的要开全。
- 输入 / / & 输出量很大(比如 1e6)的时候一定要用快读、快写!即使是 long long 也要写。但是 double 之类的还不知道怎么办。qwq
2024.11.4
-
多测不能用 memset!
-
不要把 m 和 n 弄混!!!(jsh)
-
min max 里类型要相同(?)(xjy)
-
每个函数都写 return!!!(jsh)lr?
-
struct 内部开东西、开 struct、写函数 空间开销?时间?。(还不懂,待学)
2024.11.6
- 一定要赋初值!尤其是往代码里新加了什么东西之后。(lr)
- 开 long long 要把相关函数返回值也改成 ll!(jsh)(以及函数的参数!)
- 注意求 min、max 的初值赋多少,是 inf 还是 - inf 还是 0,根据要拿去求 min/max 的值的范围。(jsh)(以及 inc 的初值赋 0,mul 的初值赋 1)
- (DP 题?)注意统计答案的范围。(jsh)
2024.11.7
- [数据类型不同的](?)不要比较!~不要取 min/max!(xjy)
- [NOI Linux 2.0](?)下 跑。
2024.11.8
- set 要用自己的 lower_bound 而不是外界的。(?)
因为这调用的是 algorithm 库的 lower_bound 不是 set 内置的 lower_bound。 || @Stannum7507 : 我草为啥阿 || @Purslane : 喜报 : set
st; auto it=lower_bound(st.beg
- 特判完要清零!(jsh)
- 无符号 和 有符号 不要比较(???)(czx,xjy,lr)
- size 是什么类型?
2024.11.13
- SPFA 负环空间要多开:https://www.luogu.com.cn/discuss/859704
2024.11.15
- 小心取模(或其他运算)之后比大小。(lr)
- 小心结构体里写多个构造函数出现神秘编译错误(我之前貌似写两个构造函数也没出过这个错,非常神秘)。(xwb)
2024.12.14
- 小心小模数、小心输入模数(可能小),对逆元的影响。解决方法:放大模数(比如 998244353 变为自己的平方)/(组合数)Lucas 定理。似乎第一种方式有限制(???)(求逆元时(???))。(xwb)
2024.12.17
- 小心文件名里的空格导致出问题!!!(?)
- 小心最大值要开够,1e18 2e18。(lr)
2025.1.20
- 不要乱对循环(sum、prod)边界取模。(xjy)
2025.2.7
- 不要误删大括号。尤其是前面那个。
- 赋初值!!!比如累加的 res=0
- 有的东西不一定单增,不要乱用,可以先排序再用,[比如
](???)。 mint inv2 = (mint(2) ^ (P - 2)), inv6 = (mint(2) ^ (P - 2)); // mint(2), not 2
- S-B 树结点上的分数是
,不是 。
2025.2.8
- 神秘 RE,开大栈空间。(xwb)
- define 之后就不要用 define 之前的了。(lr)
- 重复define???(lr)
- 勿忘 return。
- 不要忽视返回值。
- (卡常)n 比较小(如 [200](记不清是不是了))时就不要用 NTT 这种大常数的了,暴力展开。([秦九韶算法](???))。(lr 告诉我们的,我没验证对不对)
2025.2.11
- 全局定义的东西不要和在 main 之类的里面再定义一遍!
- 取模之后再
可能会寄。
2025.2.12
之类的不要用混。例如线段树的范围。(lr)- 算数据类型要开啥的时候不能只考虑结果,要考虑所有东西。
- 值域可能加出去了,超过了原来的值域(超过了给出的数据范围)。(xjy)
2025.2.13
- 离散化要带着各种东西一起,比如修改时的东西。
2025.2.14
- 快读不要忘了写
if(c == '-')
。 - 快写对负数的处理。
- 莫队。
// a[++ X], not ++ X
。 - 写 if、for、while 等 打大括号!!!
- 分清 q[i].id 和 i。扫描线。莫队。
固定块长会不会出问题啊?(莫队、分块)
手造数据(极限、corner case、……)。不要太信任样例和对拍。检查小样例情况是否完全,尤其是根号分治这种。
测出来某行某列小了不一定是整个数小了,因为位数可能都不同。(?)
[均值不等式](?)要管常数?
总时间慢可能是因为固定块长?
块长真神秘,好像不一定严格按照时间复杂度。(?)
留指甲影响敲键盘?
2025.2.15
- 小心强制在线的输入爆 int 之类的。(?)
- 不要忘了强制在线。写代码和构造数据、用别人的数据时都要注意有没有强制在线。弄清强制在线要写哪些地方,写上。
- 分块啥的也不要忘了初始化。
- 小心边界。(分块)
- 不要把 ^= 写成 ^。
- 别忘了边界取 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
- 当你用 QwQ、AwA 这种作为函数名、数组名、变量名时,一定要搞清楚到底是什么含义,不要用错、用混了。
- 不要无脑按程序里定义的顺序输入输出!按题目要求!
- 注意有没有给树根!!!不要无脑把 1 当成树根!
- 用 ((int)g[u].size()) 判叶子结点要考虑是不是根!根没有父结点。
- 想清楚、写清楚 DFS 序上的编号和原来的编号!
- 看清各种括号。
- 分块不要忘了下传标记,包括重构块时!!!虽然有时候重构不用下传。
- 小心值炸 int 啥的,取 min、取 max,只要功能一样就行。(实现时的细节)
- 大括号,分号。。。
// op[i].x, not i
。- 判,防止数组越界。
- 搞清楚是分开输入还是一起输入的。尤其是 n,m,q 啥的。错的甚至可以过样例(why <- 名)。
- 不要交错题了()
- ll 之类的,要开够。
- 注意编号从 0 还是 1 开始。之类的。转换。
- 小心 ++ 放前放后的影响。小心经历 ++(前或后)之后的值到底是多少。
- 转换标号!
lp[i]
- 不要把不是编号的东西误认为编号。
- 注意转换编号。dfs 序。
- 小心数据结构为空的时候!(?)
- 小心数据结构的根设成多少,不要写着写着就变了!(lr)
- 同时也要注意初值。
- 注意初值。
- 不要把不同的写法写混了,比如说线段树。
- 注意快读快写适用于 int 还是 ll 之类的,不能用就别用,不要无脑用。
- 不要无脑复制。不要复制后忘了删或者没发现 不该有的东西。
2025.2.18
- 强制在线可能会出神秘错误,可能是因为之前答案算错了。所以强制在线的神秘错误可能其实是 WA。其实不只是强制在线,只要答案对之后有影响的都有可能。(xjy)
- 不要因为特殊的输入输出数据而把错误的快读快写当成对的。
- 不要忘了写 return ...;
- 小心删掉 return 的后果。
return dis[u] + dis[v] - 2 * dis[LCA(u, v)]; // 2 *
dep[1] = 1; // ? // dis[1] = 0; DFS(1, 0);
- (倍增 LCA)
return fa[u][0]; // fa[u][0], not u
- 小心固定块长比较长导致样例无法覆盖分块全部情况。
- 小心样例无法覆盖全部情况。
- 树剖。分清何时用 dfn[u],何时用 u。
- 线段树、分块 都要小心 l>r。
- 传参顺序不要搞错。
- 搞清楚传 x 还是 a[x]。
- 重链剖分不要忘 siz[u]+=siz[v],淀粉质不要选(传)错分治中心。
- 小心阴险样例——DFS序和编号一样。(xjy)
- (树剖)
// dfn[tp[u]], dfn[u] 不要写反了!!!!!
- 不要把
搞错了。尤其是主席树// v, not u
- 重链剖分后 DFS 序可能和直接跑的不同!手模时不要搞错了。
- 强制在线
// 更新 lstans!!!
- 开 -Wshadow!!!小心全局变量和[局部变量](?)重名。(jsh)
- 有的东西不用写。
- DFS_1、DFS_2、DFS_3 之类的不要调用错了,包括这些里面。还有 Split_Value 和 Split_Size。
- 不要忘了调用。(lr)
- Base=5201314(???????)
- 链式前向星。无向边。空间。
- 算空间要注意 ll 之类的。
- 取模!开 ll 也可能要取模!(yt)
- 本地对,提交 RE:数组越界。(???????)
- define 是直接替换吗?
- 不懂的东西不要乱用。比如 define。(?)
- 不要乱用 memcpy!!!!!!(jsh)
- 小心神秘地方开 ll,比如二分 l+r 爆 int。(lr)
- 二分出问题可能表现为 TLE。(lr)
2025.2.19
- 小心读写(包含快读快写)写挂。
2025.2.21
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?