需要注意的

卧薪尝胆

洛谷 NOIP模拟赛 T1 「KDOI-10」商店砍价:过于散漫导致每个思路都没有深想

NOIP T1 P11361 [NOIP2024] 编辑字符串:分讨繁琐,一直想找到不用分类讨论的方法,没有耐下性子慢慢写

THUPC2025 初赛 乒乓球赛:分类讨论过于复杂,没有进一步思考就动手

北京集训联考T2:有一定思路但觉得自己肯定做不出来,就没有继续想

犯过的错误

cin 关流后就不要混用 coutprintf

动态开点线段树、主席树一定要开够空间,一般是 \(N \times 64\)

不要把 ls 和 rs 写混

不要把 \(n, m, q\) 搞混

array[N] 的下标是从 \(0\)\(N - 1\),到 \(N\) 会出 BUG

多测要清空

超出 int 后要用 1ll << i1ull << i

+ - * / % 的运算优先级比 << >>

如果是 long long,至多 >> \(62\) 位;如果是 int,那么至多 >> \(31\)

线段树 modifyquery 中都要 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

posted @ 2025-03-17 10:02  Orange_new  阅读(33)  评论(0)    收藏  举报