需要注意的
卧薪尝胆
洛谷 NOIP模拟赛 T1 「KDOI-10」商店砍价:过于散漫导致每个思路都没有深想
NOIP T1 P11361 [NOIP2024] 编辑字符串:分讨繁琐,一直想找到不用分类讨论的方法,没有耐下性子慢慢写
THUPC2025 初赛 乒乓球赛:分类讨论过于复杂,没有进一步思考就动手
北京集训联考T2:有一定思路但觉得自己肯定做不出来,就没有继续想
犯过的错误
cin 关流后就不要混用 cout 和 printf
动态开点线段树、主席树一定要开够空间,一般是 \(N \times 64\);
不要把 ls 和 rs 写混
不要把 \(n, m, q\) 搞混
array[N] 的下标是从 \(0\) 到 \(N - 1\),到 \(N\) 会出 BUG
多测要清空
超出 int 后要用 1ll << i 和 1ull << i
+ - * / % 的运算优先级比 << >> 高
如果是 long long,至多 >> \(62\) 位;如果是 int,那么至多 >> \(31\) 位
线段树 modify 和 query 中都要 pushdown
不要把变量名相似的变量搞混
当在递归函数外定义了数据结构时,注意往下递归时会不会改变数据结构中的值
当搜索一张图所有环和链时,先搜索链,再搜索环
决策单调性优化 DP 时,如果当前的 \(i\) 比最后一个决策点都劣,不要存它。
树状数组查询时是 i > 0,而不是 i >= 0
不同的 SAM 要用不同的 parent 树(黄 kx)
多个 if 嵌套时,最好都打上括号,不然 else 可能匹配到错误的 if
网络流如果新建了节点,一定要更改总结点数
对于长度达到 \(10^7\) 的数组(特别是结构体数组),一定要精细开 long long
当初始化数组时,如果没有用 memset,一定要注意 \(0\) 位置是否要赋初值,以及上界是多少
值域树状数组 for 的上界为值域,而不是序列长度
使用超快读时,如果 RE 了,可能是 MAXSIZE 没有开够
动态开点李超线段树的下标域不要开得太大
NTT 记得要初始化逆元
不要在一行代码中即写 ++cnt 又写 cnt
一维数点问题(点被多少区间包含、区间包含多少点、点左边与点不交的最靠右的区间,区间左边与区间不交的最靠右的点),都可以预处理,减少代码复杂度。
当数组下标可能为负又不方便特判时,可以写一个函数,当下标为正时返回应有的值,为负时返回 \(0\)
__lg 的精度比 log2 高,要用 __lg
DP 求答案要放在最后,否则有可能一些答案没有被遍历到
如果下标平移了,统计答案时枚举范围也要随之平移
可持久化线段树合并时,如果对应位置上只有一棵线段树有值,此时返回时不需要新建节点,否则空间爆炸
dijkstra 重载运算符时,如果写成这样:
struct Node{
int id, dis;
bool operator < (const Node &b) const{
return dis > b.dis;
}
};
就是在求最短路,如果写成这样:
struct Node{
int x, y, dis;
bool operator < (const Node &b) const{
return dis < b.dis;
}
};
就是在求最长路
负数取模依然是负数
带限制的拓扑排序也要做完整
resize 可能会给 vector 随机赋值
慎用 getchar(),或者使用 while(...) getchar()
交互题慎用 #define,或者使用 #undef
本文来自博客园,作者:Orange_new,转载请注明原文链接:https://www.cnblogs.com/JPGOJCZX/p/18776258

浙公网安备 33010602011771号