分类: 学术

28 篇文章

「NOIP Record」#15 数论题目选讲
Hankson的趣味题 从质因子的角度考虑。 把 $a,b,c,d$ 都分解了,对于一个质因子 $p_i$,题目给出的条件等价于$$\min \Big( e_{p_i} (x) ,e_{p_i} (a)\Big) =e_{p_i}(c)$$ $$\max \Big( e_{p_i}(x),e_{p_i}(b) \Big) = e_{p_i}(d)$…
「NOIP Record」#14 基础数论(1)
质数筛 埃氏筛模板 void prime() { for(int i=2;i<=n;++i) if(!v[i]) { for(int j=i*i;j<=n;j+=i) v[j]=1; // 优化:从i*i开始枚举 } } 线性筛模板 void ora() { for(int i=2;i<=n;++i) { if(!…
「NOIP Record」#13 树形DP(2)
[ARC101E] Ribbons on Tree 对于以 $x$ 为根的子树,如果 $(x,fa_x)$ 的边没有被覆盖,那么说明子树内没有任何一个点与子树外的点匹配。 把这些没有被覆盖的边看作特殊边,那么整棵树就被若干特殊边划分成了若干连通块。我们要求的是不含任何特殊边的匹配方案。 考虑容斥。钦定一个边集 $S$,表示 $S$ 内的边一定是特殊…
「NOIP Record」#12 并查集
并查集是一个森林,每棵树表示一个集合,并且这个集合根据某种具有传递性的关系构建起来。 普通并查集关心的信息只有 $x$ 所在集合的根,$fa_x$ 表示的仅仅是一个传递性关系,即 $fa_x$ 与 $x$ 所在集合的根相同。从任意节点往上跳,都能找到它所在集合的根。 使用路径压缩优化,在向上访问节点时,把路径上所有节点的 $fa$ 都改为根,那么就…
「NOIP Record」#11 最短路和最小生成树
图论这一块内容比较多,而且题目涉及的 Trick 也很多,因此分若干篇。 本文略去所有算法本身性质的证明过程。 最短路 Dijkstra和SPFA $\text{Dijkstra}$ 算法基于一个重要的性质:全局最小值不可能再被任何边更新。这样,在边权为非负数的最短路问题中显然满足,在存在负边时不满足。同时,保证了最多从每个节点处扩展 $1$ 次,…
「NOIP Record」#10 单调性优化与双指针
luogu8551 Bassline 题目的限制翻译过来就是 $[x,y]$ 中任意位置都被覆盖了相同次数。 用差分求出每个点被覆盖的次数,双指针求极长的满足条件的位置即可。 #include<bits/stdc++.h> using namespace std; #define int long long #define uint u…
「NOIP Record」#9 状态压缩
聊聊状态压缩。 顾名思义,就是把一个状态压成一个整数,从而使得问题的所有状态可以度量。 一般都是用二进制状态压缩来表示子集与全集的关系,对应着二进制每一位都是 $0$ 或 $1$。更高的进制能表示更多的信息,但状态的数量也会随之增加,并且实现的时候要自己手写位运算,较为复杂,本文不会涉及。 信息的表示 luogu7076 [CSP-S2020] 动…
「NOIP Record」#8 搜索剪枝与记忆化搜索
搜索剪枝 纯搜索剪枝题很少,早就融入各种搜索之中了。 但是在各种多项式时间的搜索里,剪枝仍然是重要的。 目前只有一道题,以后看情况加。 luogu1120 小木棍 能注意到长度一定是所有木棍总和的倍数,并且至少是 $\max{a_i}$,所以只对这部分搜索就行。 设dfs(cnt,len,lst)表示当前还剩下 $cnt$ 根木棍要拼接,当前木棍剩…
「NOIP Record」#7 计数杂题 (2)
专门放一些不大可能会考的计数题,长期更新。 大约是输入的只有问题规模,输出的只有相应方案数。 luogu6561 [SBCOI2020] 人 两两不相邻这个条件不是很容易搞。 考虑把 $[1,2m]$ 分成 $m$ 个数对,形如 $(\text{odd},\text{even})$,其中 $\text{odd} +1 =\text{even} $ …
「NOIP Record」#6 计数杂题 (1)
计数杂题。 CF840C On the Bench 先进行一些基本的观察。 $\texttt{Observation}$ ${a_i}$ 中乘积为完全平方数的数集,一定是相对封闭的。因此我们可以将 ${a_i}$ 划分成若干个集合,满足其中两两乘积为完全平方数。 $\texttt{proof}$ 考虑和 $a_i$ 相乘为完全平方数的数集 ${a_…