随笔分类 - Algorithm
摘要:一、题目描述 P8614 [蓝桥杯 2014 省 A] 波动数列 二、问题简析 设第一个数为 \(x_0\),\(d_i=a~or~-b\),则长度为 \(n\) 的数列的和为: \[\begin{split} s&=x_0+x_1+x_2+...+x_{n-1}\\ &=(x_0 + 0) + (
阅读全文
摘要:一、拓展欧几里得算法 1.1 算法简析 根据裴蜀定理,对任意 \(a\) 和 \(b\),一定存在 \(x\) 和 \(y\),使 \(ax + by = \text{gcd}(a, b)\)。拓展欧几里得算法不仅能求出 \(a\) 和 \(b\) 的最大公约数,而且能找到一对 \((x, y)\)
阅读全文
摘要:一、题目描述 P8754 [蓝桥杯 2021 省 AB2] 完全平方数 二、问题简析 2.1 唯一分解定理 唯一分解定理:大于1的自然数都可以唯一地写成素数的积。 由该定理,一个大于 \(1\) 的自然数 \(b\) 可以表示为 \(b=a_1^{p_1}*a_2^{p_2}*...*a_n^{p_
阅读全文
摘要:一、题目描述 P8742 [蓝桥杯 2021 省 AB] 砝码称重 二、问题简析 类似 01背包,对于每个元素,可以拿(+、-)或不拿。 令 \(dp[i + 1][j]=\) 前 \(i + 1\) 个元素是否可以使值为 \(j\)。 \[dp[i + 1][j] = \begin{cases}
阅读全文
摘要:一、题目描述 P8646 [蓝桥杯 2017 省 AB] 包子凑数 二、题目简析 首先,要理解一个定理——裴蜀定理: 若任意整数 \(a\) 和 \(b\),且有 \(m = \text{gcd}(a, b)\),对任意整数 \(x\) 和 \(y\),\(ax+by=c\),则 \(m~|~c\)
阅读全文
摘要:一、题目描述 P8683 [蓝桥杯 2019 省 B] 后缀表达式 二、算法简析 显然,这道题要用贪心思想。想当然的,我们会先进行降序排序,将大的相加,在减去小的。然而,这种想法是错误的。因为这道题要求的是后缀表达式的最大值,为了便于理解,我们转换为中缀表达式的最大值,这里就有了一个隐含条件——中缀
阅读全文
摘要:一、简析前缀和 有一系列元素 \(A[a_0,~a_1,~...,~a_n,~...]\),前缀和 \(pre\_sum[n]=A[0]+A[1]+···+A[n]\)。 利用前缀和,我们可以很高效地得到 \([L,~R]\) 的区间和 \(\sum_{i=L}^{R}A[i]=pre\_sum[R
阅读全文
摘要:一、单源最短路径 typedef long long ll; const int MAX = 2e3 + 5; const ll INF = numeric_limits<ll>::max(); typedef struct { int to, worth; } edge; int n, m; ve
阅读全文
摘要:一、问题简述 有一棵 \(n\) 个节点组成的树,每个节点 \(a_i\) 有一个权值 \(a_i.worth\)。求子树的点权值和的最大值。 二、算法简析 该问题要用树形dp求解。 设 \(dp[u] =\) 以 \(u\) 为根节点的子树的点权值和的最大值。我们采用邻接表的形式存储边,\(G[u
阅读全文
摘要:一、题目描述 P8741 [蓝桥杯 2021 省 B] 试题 C :直线 二、算法简析 设两点 \(P_1(x_1, y_1)\) 和 \(P_2(x_2, y_2)\)。 斜率为: \[k = \frac{y_2 - y_1}{x_2 - x_1} \] 斜截式为: \[\begin{split}
阅读全文
摘要:一、算法原理 我们不直接比较字符串 \(S\) 的字串和模式串 \(T\) 是否相等,而是比较二者的哈希值。 设字符串 \(S\) 的长度为 \(l\),字符串 \(T\) 的长度为 \(m\)。 取两个互素的常数 \(b\) 和 \(h\) (\(l < b < h\)),设字符串 \(C = c
阅读全文
摘要:一、预处理组合数 核心: \[C_a^b = C_{a-1}^b + C_{a-1}^{b-1} \]适用范围:\(a\) 较小的情况下,如 \(a \leq 10^3\)。 算法简析:令 \(\text{C[n][k]}=C_n^k\),规定 \(\text{C[0][0] = 1}\),则 \[
阅读全文
摘要:法一:运用位运算简化计算 以 \(3^{22}\) 为例,它的底数为 \(3\),指数为 \(22\)。指数的二进制形式为 10110。通过二进制与十进制的转换,我们可以把 \(22\) 分解为 \(22 = 2^4 * 2^2 * 2^1\)。因此,\(3^{22} = 3^{2^4} * 3^{
阅读全文
浙公网安备 33010602011771号