do_while_true

一言(ヒトコト)

NOIP 2020 复习计划

List

补qbxt的每一场的题。(未完成)

VP比赛:

1

2

3

4

5

6

7

8

要求: 模板背过,尽量快的码完一遍过。理解原理。

初始化 初始化 初始化

特判 特判 特判

算空间 算空间 算空间

暴力 暴力 暴力

对拍 对拍 对拍

图/树论:

Dijstra 5:55

SPFA(+差分约束+负环)

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\),而且要特判 \(n\leq x\) 时的情况。

动态规划,注意 \(f\) 定义、是否是答案的特定条件下(可以理解为 \(f_i\) 为当前选 \(i\) ,但是答案选 \(n\) 和不选都可以,答案不一定是 \(f_n\)

动态规划,对于刷表法,数组要多开一定的位数。

多组测试的时候一定要清空彻底,不一定是只清空 \([1,n]\) ,而是把所以可能用到的都清空掉。

二分下界是 \(1\) 还是 \(0\) 或者其他。

浮点数二分时eps是算进复杂度里面去的(\(l=0,r=INF\) 时二分复杂度为 \(\mathcal{O}(\log(INF\times eps^{-1}))\))。

并查集的按秩合并要特判 \(find\) 出来俩节点的根节点相等情况,要不然会让 \(siz\) 是错的从而复杂度变成错的。

质因数分解不要写成 \(\mathcal{O}(n)\) 的(FST泪两行)。

整除和下取整不能混用(因为有负数的情况)。

测极限数据(格雷码泪两行)。

当出现不等式求满足不等式的取值个数的时候,如果有多个数,尝试枚举取值少的那些数。 例子1,例子2(80分做法)

尽量不要#definemaxmin来卡常,原因

读题/理解方面

"至少"还是"恰好"

“正整数”还是“非负数”(是否包括0的情况)

“连续”还是“不连续”

“相同”还是“不相同”

是否保证互不相同(是否需要去重)

"Yes,No" or "YES,NO"

给出的图是否连通(判断不连通的情况)

树形 dp 一定要细心对一个大的树找规律(也要注意链,菊花图(或类似的)的情况的时间复杂度)

树/图注意是否有方向上的限制,

posted @ 2020-08-30 10:10  do_while_true  阅读(575)  评论(0编辑  收藏  举报