List
补qbxt的每一场的题。(未完成)
VP比赛:
要求: 模板背过,尽量快的码完一遍过。理解原理。
初始化 初始化 初始化
特判 特判 特判
算空间 算空间 算空间
暴力 暴力 暴力
对拍 对拍 对拍
图/树论:
Dijstra 5:55
Kruscal 5:54
Prim(堆优化) 5:57
Tarjan
割点6:06
LCA 7:20(树剖)
树链剖分 (就写了个LCA,觉得不太可能考)
树上差分
数论:
//exgcd
//线性筛 1:51
//线性求逆元 6:23
矩阵快速幂(这个真不知道该放哪儿...)
字符串
KMP(待背)
//Trie
哈希 4:02
DS
//单调队列 4:10
//单调栈 2:12
//差分数组(一维+二维)
//前缀和(一维+二维)
//线段树
//树状数组
//ST表
//分块
算法
//二分
模拟退火(待背)
//三分
dp
概率dp
状压dp
数位dp
树形dp(EX: 树上背包,/换根dp/)
区间dp
(都有待复习)
比较杂的处理方法
分段打表
比较好用的策略:
小黄鸭调试法
先码暴力部分分,爆搜先打好保底分。
注意事项:
推荐一:Venus
推荐二:dyls
(有好的推荐也可以留言我放上来鸭)
标重的是犯过第二次错误的
处理方面
无向图邻接表开两倍,如果有超源超汇的话还要再多开一点,一顶要仔细算好,不要爆空间也不要开少了边。
sort
重载运算小于号,如果优先级相等的话一定是返回 false ,要不然会两个相同优先级的一直来回交换时间复杂度退化成 (mathcal{O}(n^2)) 。
sort
左边闭区间,右边开区间(右边要多+1)
时刻想着 for
循环是在枚举谁(的下标),防止出现使用不统一的情况(可能意思有点糊,大概就类似于分块时枚举的是块还是数)。
写大模拟一定要保持思路的清晰,先捋一遍所有的优先顺序,彻底理解题意,变量名尽量用读的懂的拼音,不要吝啬,多加注释。
遇到差相等/差成比例: 差分
区间类问题只有一次查询: 差分,只有一次修改: 前缀和
注意某些操作最多的操作次数。避免不必要的常数(可以参考线段树区间开平方)
遇到图论棘手时可以考虑换种建模方式,或者换种连边方式(把点看成边把边看成点)
动态规划,对于填表法,如果 (f_i) 最远会从 (f_{i-x}) 转移,要预处理(初始化) ([1,x]) 中的每一个 (f),而且要特判 (nleq x) 时的情况。
动态规划,注意 (f) 定义、是否是答案的特定条件下(可以理解为 (f_i) 为当前选 (i) ,但是答案选 (n) 和不选都可以,答案不一定是 (f_n))
动态规划,对于刷表法,数组要多开一定的位数。
多组测试的时候一定要清空彻底,不一定是只清空 ([1,n]) ,而是把所以可能用到的都清空掉。
二分下界是 (1) 还是 (0) 或者其他。
浮点数二分时eps是算进复杂度里面去的((l=0,r=INF) 时二分复杂度为 (mathcal{O}(log(INF imes eps^{-1}))))。
并查集的按秩合并要特判 (find) 出来俩节点的根节点相等情况,要不然会让 (siz) 是错的从而复杂度变成错的。
质因数分解不要写成 (mathcal{O}(n)) 的(FST泪两行)。
整除和下取整不能混用(因为有负数的情况)。
1.0*
出来是 float
,如果卡精度换 double
。
测极限数据(格雷码泪两行)。
当出现不等式求满足不等式的取值个数的时候,如果有多个数,尝试枚举取值少的那些数。 例子1,例子2(80分做法)
尽量不要#define
掉max
和min
来卡常,原因。
读题/理解方面
"至少"还是"恰好"
“正整数”还是“非负数”(是否包括0的情况)
“连续”还是“不连续”
“相同”还是“不相同”
是否保证互不相同(是否需要去重)
"Yes,No" or "YES,NO"
给出的图是否连通(判断不连通的情况)
树形 dp 一定要细心对一个大的树找规律(也要注意链,菊花图(或类似的)的情况的时间复杂度)
树/图注意是否有方向上的限制,如