随笔分类 -  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) + ( 阅读全文
posted @ 2024-03-16 20:30 ltign 阅读(37) 评论(0) 推荐(0)
摘要:一、拓展欧几里得算法 1.1 算法简析 根据裴蜀定理,对任意 \(a\) 和 \(b\),一定存在 \(x\) 和 \(y\),使 \(ax + by = \text{gcd}(a, b)\)。拓展欧几里得算法不仅能求出 \(a\) 和 \(b\) 的最大公约数,而且能找到一对 \((x, y)\) 阅读全文
posted @ 2024-03-13 15:31 ltign 阅读(48) 评论(0) 推荐(0)
摘要:一、题目描述 P8754 [蓝桥杯 2021 省 AB2] 完全平方数 二、问题简析 2.1 唯一分解定理 唯一分解定理:大于1的自然数都可以唯一地写成素数的积。 由该定理,一个大于 \(1\) 的自然数 \(b\) 可以表示为 \(b=a_1^{p_1}*a_2^{p_2}*...*a_n^{p_ 阅读全文
posted @ 2024-03-09 21:58 ltign 阅读(145) 评论(0) 推荐(0)
摘要:一、题目描述 P8742 [蓝桥杯 2021 省 AB] 砝码称重 二、问题简析 类似 01背包,对于每个元素,可以拿(+、-)或不拿。 令 \(dp[i + 1][j]=\) 前 \(i + 1\) 个元素是否可以使值为 \(j\)。 \[dp[i + 1][j] = \begin{cases} 阅读全文
posted @ 2024-03-05 16:54 ltign 阅读(67) 评论(0) 推荐(0)
摘要:一、题目描述 P8646 [蓝桥杯 2017 省 AB] 包子凑数 二、题目简析 首先,要理解一个定理——裴蜀定理: 若任意整数 \(a\) 和 \(b\),且有 \(m = \text{gcd}(a, b)\),对任意整数 \(x\) 和 \(y\),\(ax+by=c\),则 \(m~|~c\) 阅读全文
posted @ 2024-03-01 21:32 ltign 阅读(45) 评论(0) 推荐(0)
摘要:一、题目描述 P8683 [蓝桥杯 2019 省 B] 后缀表达式 二、算法简析 显然,这道题要用贪心思想。想当然的,我们会先进行降序排序,将大的相加,在减去小的。然而,这种想法是错误的。因为这道题要求的是后缀表达式的最大值,为了便于理解,我们转换为中缀表达式的最大值,这里就有了一个隐含条件——中缀 阅读全文
posted @ 2024-02-26 22:24 ltign 阅读(54) 评论(0) 推荐(0)
摘要:一、简析前缀和 有一系列元素 \(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 阅读全文
posted @ 2024-02-25 19:51 ltign 阅读(43) 评论(0) 推荐(0)
摘要:一、单源最短路径 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 阅读全文
posted @ 2024-02-25 18:41 ltign 阅读(15) 评论(0) 推荐(0)
摘要:一、问题简述 有一棵 \(n\) 个节点组成的树,每个节点 \(a_i\) 有一个权值 \(a_i.worth\)。求子树的点权值和的最大值。 二、算法简析 该问题要用树形dp求解。 设 \(dp[u] =\) 以 \(u\) 为根节点的子树的点权值和的最大值。我们采用邻接表的形式存储边,\(G[u 阅读全文
posted @ 2024-02-25 14:38 ltign 阅读(33) 评论(0) 推荐(0)
摘要:一、题目描述 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} 阅读全文
posted @ 2024-02-20 14:24 ltign 阅读(32) 评论(0) 推荐(0)
摘要:一、算法原理 我们不直接比较字符串 \(S\) 的字串和模式串 \(T\) 是否相等,而是比较二者的哈希值。 设字符串 \(S\) 的长度为 \(l\),字符串 \(T\) 的长度为 \(m\)。 取两个互素的常数 \(b\) 和 \(h\) (\(l < b < h\)),设字符串 \(C = c 阅读全文
posted @ 2024-02-18 19:56 ltign 阅读(200) 评论(0) 推荐(0)
摘要:一、预处理组合数 核心: \[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}\),则 \[ 阅读全文
posted @ 2024-02-16 19:36 ltign 阅读(76) 评论(0) 推荐(0)
摘要:法一:运用位运算简化计算 以 \(3^{22}\) 为例,它的底数为 \(3\),指数为 \(22\)。指数的二进制形式为 10110。通过二进制与十进制的转换,我们可以把 \(22\) 分解为 \(22 = 2^4 * 2^2 * 2^1\)。因此,\(3^{22} = 3^{2^4} * 3^{ 阅读全文
posted @ 2024-02-15 14:48 ltign 阅读(28) 评论(0) 推荐(0)