随笔分类 -  Algorithm

摘要:一、算法简析 功能:主要用于查询区间的最值、\(gcd\)、\(lcm\)等。 效率:预处理 \(O(nlogn)\),查询 \(O(1)\)。 注:\(st\) 表用于区间查询。若要区间修改,要用线段树。 以区间最大值为例,介绍 \(st\) 表。 预处理 令 \(st[i][j]=\) 以第 \ 阅读全文
posted @ 2024-05-27 09:32 ltign 阅读(60) 评论(0) 推荐(0)
摘要:一、模板 #define lc(p) p << 1 // 左孩子 #define rc(p) p << 1 | 1 // 右孩子 const int MAX = 5e5 + 5; // 数列元素最大个数 ll n, m, w[MAX]; // n -- 数列元素个数; m -- 操作数; w[i] 阅读全文
posted @ 2024-05-22 15:12 ltign 阅读(28) 评论(0) 推荐(0)
摘要:一、算法简析 BSGS算法(Baby Step Giant Step),可以求解高次同余方程。 条件 正整数 \(a,b,p\),且 \(a\) 与 \(p\) 互质,求满足 \(a^x\equiv b~(mod~p)\) 的最小非负整数 \(x\)。 化简 由拓展欧拉定理,得到 \[a^x\equ 阅读全文
posted @ 2024-05-21 21:32 ltign 阅读(100) 评论(0) 推荐(0)
摘要:基础概念 欧拉定理 对于正整数 \(a\) 和 \(m\),若满足 \(gcd(a,m)=1\),则 \(a^{\varphi(m)}\equiv1~(mod~m)\)。\(\varphi(m)\) 为 \(m\) 的欧拉函数。 拓展欧拉定理 在 \((mod~m)\) 的前提下, \[a^b\eq 阅读全文
posted @ 2024-05-21 19:48 ltign 阅读(48) 评论(0) 推荐(0)
摘要:一、欧拉函数 定义 \([1,n]\) 中与 \(n\) 互质的数的个数,称为欧拉函数,记为 \(\varphi(n)\)。 互质的定义:对于正整数 \(a\) 和 \(b\),若 \(gcd(a,b)=1\),则 \(a\) 和 \(b\) 互质。 性质 若 \(p\) 是质数,则 \(\varp 阅读全文
posted @ 2024-05-21 17:23 ltign 阅读(129) 评论(0) 推荐(0)
摘要:一、算法简析 线性筛,又叫欧拉筛,用来筛出 \([2,n]\) 中所有的质数。该算法比埃氏筛的效率更高,为线性 \(O(N)\)。 该算法也是从小到大枚举每个数,若该数没筛掉,则为质数。但是,筛数的规则不同:此时枚举的数是 \(i\),无论是否是质数,枚举已知的质数 \(p_j\), 合数 \(i 阅读全文
posted @ 2024-05-21 15:37 ltign 阅读(113) 评论(0) 推荐(0)
摘要:一、算法简析 数位dp题目的特点 求某个区间 \([L,R]\) 内,满足某种性质的数的个数。 数位dp的解题技巧 技巧一 类似前缀和,转换为 \([0,R]-[0,L-1]\) 求解。分别统计两个区间内满足条件的数的个数,再作差。 技巧二 由于边界 \(R\) 的限制,首先就要保证讨论的数小于等于 阅读全文
posted @ 2024-05-19 20:31 ltign 阅读(33) 评论(0) 推荐(0)
摘要:一、算法简析 \(Johnson\) 算法可以求解带负权边的中小图的全源最短路径。 算法步骤: 建立虚拟源点 \(0\),从 \(0\) 至其它各点添加权值为 \(0\) 有向边。 用 \(spfa\) 算法求出从 \(0\) 至其它各点的最短路径 h[i]。 将原图中边的权值改为:\(w(u,v) 阅读全文
posted @ 2024-05-15 16:53 ltign 阅读(128) 评论(0) 推荐(0)
摘要:一、题目描述 将 \(2022\) 拆分成 \(10\) 个互不相同的正整数之和,有多少种方案? 二、问题简析 令 \(dp[i][j]=\) \(i\) 的 \(j\) 划分的方案数(满足互不相同的正整数)。有两种实现方式: \(dp[i][j]\) 不含 \(1\) 在 \(dp[i-j][j] 阅读全文
posted @ 2024-05-13 11:43 ltign 阅读(74) 评论(0) 推荐(0)
摘要:一、问题描述 有 \(n\) 个相同的物品,将它们划分成 \(m\) 组,有几种划分方法。 注:以下划分都算一种: 1 + 1 + 2 1 + 2 + 1 2 + 1 + 1 二、问题简析 本题采用动态规划求解。令 \(dp[i][j]=\) \(i\) 的 \(j\) 划分的方案数。值得注意的是, 阅读全文
posted @ 2024-05-13 11:02 ltign 阅读(83) 评论(0) 推荐(0)
摘要:一、最近公共祖先(LCA) LCA:Least Common Ancestor P3379 【模板】最近公共祖先(LCA) #include <bits/stdc++.h> using namespace std; typedef long long ll; ll quickin(void) { l 阅读全文
posted @ 2024-05-11 18:33 ltign 阅读(85) 评论(0) 推荐(0)
摘要:一、P2812 校园网络【[USACO]Network of Schools加强版】 P2812 校园网络【[USACO]Network of Schools加强版】 1、算法简析 首先,建立一张有向图——学校是节点,学校间的单向线路是有向边。\(Q_1\):选出若干个节点,从这些节点出发可以到达其 阅读全文
posted @ 2024-05-08 16:42 ltign 阅读(42) 评论(0) 推荐(0)
摘要:定义 对于数组 A[n],它的差分数组为: \[diff[i]=\begin{cases} A[i],&i==0 \\ A[i]-A[i-1],&0<i<n \end{cases}\]显然,通过差分数组 diff[n],可以求得 A[n] 中的某一具体元素: \[A[i]=\begin{cases} 阅读全文
posted @ 2024-03-28 19:09 ltign 阅读(22) 评论(0) 推荐(0)
摘要:一、题目描述 P8687 [蓝桥杯 2019 省 A] 糖果 二、问题简析 由题意,糖果的种类 \(M\) 最多为 \(20\),所以我们可以采用二进制位的方式来表示每包糖果的组成。具体:二进制的第 \(i\) 位表示第 \(i + 1\) 种糖果,\(1\) 表示有,\(0\) 表示无。通过这种表 阅读全文
posted @ 2024-03-26 22:13 ltign 阅读(45) 评论(0) 推荐(0)
摘要:一、问题描述 P1020 [NOIP1999 提高组] 导弹拦截 二、问题简析 该题要我们求两个问题: 1、不上升子序列的最大长度 2、不上升子序列的最少个数 利用 \(Dilworth\) 定理,我们得到不上升子序列的最少个数等于上升子序列的最大长度。 现在,就是求这两个问题: 1、不上升子序列的 阅读全文
posted @ 2024-03-24 20:26 ltign 阅读(46) 评论(0) 推荐(0)
摘要:一、题目描述 B3637 最长上升子序列 二、问题简析 2.1 法一:\(O(N^2)\) 令 \(dp[i]=\) 以 \(a_i\) 结尾的上升子序列的最大长度。 以 \(a_i\) 结尾的上升子序列有两种可能: 1、仅有 \(a_i\) 一个元素 2、在满足 \(j < i\) 且 \(a_j 阅读全文
posted @ 2024-03-24 20:07 ltign 阅读(42) 评论(0) 推荐(0)
摘要:@目录一、题目描述二、算法简析三、本题代码 一、题目描述 P9242 [蓝桥杯 2023 省 B] 接龙数列 二、算法简析 核心思想:动态规划 题目要我们求删除数的最小个数。可以转变问题,求能形成的接龙数列的最大长度 \(MaxLength\),\(n - MaxLength\) 即为所求。 由题意 阅读全文
posted @ 2024-03-23 19:53 ltign 阅读(81) 评论(0) 推荐(0)
摘要:一、问题描述 P8744 [蓝桥杯 2021 省 A] 左孩子右兄弟 二、问题简析 2.1 左孩子右兄弟 首先,我们要了解怎么通过“左孩子右兄弟”表示法将多叉树转化为二叉树:对于一棵多叉树,一个父节点有多个子节点,将第一个子节点作为父节点的左孩子,并与父节点相连;将剩余的子节点作为左孩子的右兄弟,并 阅读全文
posted @ 2024-03-17 17:05 ltign 阅读(312) 评论(0) 推荐(0)