THE JOURNAL / 083 ENTRIES

思考的索引

算法题解、数学笔记,以及沿途的小发现。

共 83 篇文章

THOUGHTS, COLLECTED.
19

CF837D Round Subset 题解

Round Subset - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Solution 问题转化为:设取的 个数的因子中共有 个 , 个 。选择取数的方案,使得 最大化。

2 分钟
21

CF1187E Tree Painting 题解

Tree Painting - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Solution 容易得出结论:可选择的只有第一个染色点,且不妨将该点视作根结点。该点确定后,本题答案也就确定了为所有子树的大小之和。现在要求的是如何选择根结点,使得答案最大。

3 分钟
23

CF600E Lomsat gelral 题解

Lomsat gelral - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Solution 树上启发式合并模板题。 考虑暴力做法:设以 为根的子树的答案为 ,每次求 都重新遍历整棵子树。选择从 开始往下 dfs,然后从子结点开始一个一个地求 ,时间复杂度为 。

4 分钟
28

CF337D Book of Evil 题解

传送门 Solution 设 表示以 为根的子树中,离 最远的重要结点, 表示以 为根的子树中,离 次远的重要结点, 表示以 为根的子树外离 最远的结点。

3 分钟
29

CF1132F Clear the String 题解

传送门 Solution 区间 dp。设 为删去区间 的最小代价。显然,一个包含两种或以上字符的区间,它代价最小的删去方法中,一定存在一个断点将区间分成左右两半,使得这两个区间是各自删去的。

2 分钟
36

UVA1316 Supermarket 题解

传送门 Solution 对物品以过期时间(从小到大)为第一关键字,价格(从大到小)为第二关键字进行排序,然后开一个按照物品价值排序的小根堆。

3 分钟
37

CF1200E Compress Words 题解

传送门 Solution 设当前待合并的串为 ,已合并的串为 。若 ,则 。否则 等于 与 长度为 的后缀拼接而成的字符串。对 进行 KMP,求出最大相同前后缀长度 。把 的相应长度后缀并入 后面即可。

2 分钟
40

CF1627D Not Adding 题解

传送门 Solution 注意数据范围。用桶记录某数是否在数组内出现。从 枚举 到 ,检查是否能生成 。若所有在数组内的 的倍数的最大公约数等于 ,则可生成 。 设数组内最大的数为 ,时间复杂度

2 分钟
41

CF19B Checkout Assistant 题解

传送门 Solution 若设 为选择付款的商品的 之和为 时,支付的最小金额, 为这些商品的数量。那么只有 时, 才为一种合法的答案。

2 分钟
55

CF1997F Chips on a Line 题解

传送门 Solution 设 为斐波那契数列的第 项, 为第 格的芯片数,那么当所有 确定时,无论怎么操作,都能保证 不变。因此所有情况都可以变成在第一格上放置若干个芯片,其它格子上没有芯片。

2 分钟
56

CF1993D Med-imize 题解

传送门 Solution 有一个显然的事实:被删除的块的大小一定是 的整数倍。因此我们不妨将原先的操作变成:挑选 个不重复的,大小为 的区间进行消除。

2 分钟
57

ARC181C Row and Column Order 题解

传送门 Solution 小清新构造题。 把每一格初始化为 ,接下来进行 次操作。第 次操作将第 行为 的格子全部变成 ,然后将第 列为 的格子全部变成 。

2 分钟
58

ARC181D Prefix Bubble Sort 题解

传送门 Solution 先用树状数组求逆序对,得出数组总共的逆序对数量 。设 和它前面的数共组成 对逆序对。 手玩样例后不难理解,操作 的本质,其实就是对所有 ,若 非零,则 。设执行操作 前有 个 非零,则执行操作后整个序列的逆序对数量减少 。

3 分钟
60

CF1223F Stack Exterminable Arrays 题解

传送门 Solution 从 到 枚举数字,对于当前数字,若与栈顶元素相同,则弹出栈顶元素,否则压入当前数字。随后将当前栈的状态通过哈希映射到 map 数组中。map 数组负责统计该状态出现的次数。

3 分钟
61

CF1982D Beauty of the mountains 题解

传送门 Solution 设有雪顶和无雪顶的山的总高度差为 。 通过计算代表山峰类型的 矩阵的二维前缀和,可以求出每个大小为 的方形区域中,两种类型的山的数量差。设每个方形的数量差分别为 ,则问题转换为方程

3 分钟
62

CF1989D Smithing Skill 题解

传送门 Solution 注意到每把武器只使用一种金属锻造,可以独立计算每种金属锭的贡献。 把问题转换为:有一个数 和 个操作,每个操作包含两个参数 、。当满足 ,则可执行操作 ,使 变为 。求可对 操作次数的最大值。

3 分钟
63

CF1982C Boring Day 题解

传送门 Description 有大小为 的数组 ,正整数 、。数组中相邻的多个数可绑定为一组。一个数只能在一个组内。求最多能有多少组满足组内元素之和在 内。

2 分钟
64

CF1986E Beautiful Array 题解

传送门 Description 给定一个长度为 的数组 和正整数 ,数组可任意排序且不占用操作次数。一次操作可将 。求最少多少次操作能将该数组变为回文数列,即保证 。

4 分钟
66

KMP 字符串匹配:前缀函数与算法实现

对比朴素枚举,KMP 的思想是当匹配出现不一样的字符时,根据模式串当前子串的最大相同前后缀,将模式串的指针回退到最大相同前缀的末尾而非模式串的开头,从而优化时间复杂度。 记录子串最大相同前后缀长度的数组为 。下图展示了 的求解过程。

2 分钟
67

洛谷 P1470 最长前缀(Longest Prefix)题解

传送门 逐个对集合 中的字符串进行 KMP ,得出其在串 中的所有覆盖区间。问题转换成如何选取相互无重合部分的区间,以 串的左端点为起点,能覆盖最大的连续区域。 对区间以左端点为关键字,从小到大进行排序。定义数组 记录点 的左侧是否已被全部无重合地覆盖。枚举区间,若区间左端点的左边已全部覆盖,即 ,则该区间可…

3 分钟
68

C++ STL:set 与 multiset 用法

set 和 multiset 作为 C++ STL 的一部分,由红黑树实现,能保持容器内元素始终有序。其插入、查找、删除的时间复杂度均为 。两者区别在于 set 不允许有重复元素,multiset 允许有重复元素。 这里顺便提起 unordered_set 和 unordered_multiset,底层实现是…

2 分钟
69

CF1618G Trader Problem 题解

传送门 Solution 并查集。在一个 下能通过若干次交换相互得到的物品构成一个集合。 对 个询问升序排序,离线处理。 对大小为 的数组 进行排序,枚举 ,二分查找在哪个询问时合并 和 所在集合。 一个集合包含的元素必然在有序数组 中构成连续区间。

4 分钟
70

CF1971H ±1 题解

传送门 Solution 2-SAT 板子题。 设点 为 , 为 。 对于每一列,最少要有两个 。这意味着,若一列中的一个数为 ,则其余两个数必定为 ,这就得到了两条有向边。我们分别假设一列中的三个数为 ,就得到了 条有向边。因为有 列,所以一共有 条有向边。然后跑 Tarjan,判断是否有 、 在同一强连通…

4 分钟
72

CF1971G XOUR 题解

传送门 Solution 注意到若 ,则 。我们将除以四后结果相同的元素分到同一组。显然,若 , 可交换,, 可交换,则 , 可交换。所以同一组内的所有元素可相互交换,即每一组均可内部排序。 将每一组排好序后,倒序枚举原数组,将每个元素替换成所在组内的最后一个元素,并将其从组内弹出。替换完成的新数组即为答案。

2 分钟
73

2022 蓝桥杯国赛 A 组:最大公约数题解

传送门 Solution 首先考虑数组内已经有 的情况。设此时有 个 ,则答案为 。 再考虑数组内没有 的情况。要想让整个数组变成 ,首先要先在某一段连续的区间内进行 操作,生成第一个 。然后通过 次 ,把数组的其余元素变成 。设生成第一个 的连续区间长度为 ,本题答案即为

4 分钟
74

2022 蓝桥杯国赛 A 组:选素数题解

传送门 Solution 设第一次操作的结果为 ,选定的素数为 。第二次操作的结果为 ,选定的素数为 。由题意可得 题目给出的是 ,所求为 的最小值。要使 最小,则要使 最小。因此找出 的最大质因数。再枚举 ,求出符合上文不等式的最小合法 ,可找出答案。

2 分钟
80

模拟退火:算法流程、调参与例题

具有某些优点的随机化算法,适用于最优解问题。 可以根据温度系数决定跳出当前最优解的概率,可以避免陷于局部最优解的情况。 定义最大温度,降温系数,最低温度,当前温度。当前温度初始化为最大温度,每次乘以降温系数,直到低于最低温度。

9 分钟
82

根号分治:阈值划分与例题

对于一类问题,有两种或多种不同的解法,均无法单独在时限内过题,但在特定的数据范围内优势明显。这时可以设定阈值,对于不同的数据范围,使用不同的算法,令总时间复杂度可以接受。 常见的阈值: 等。

12 分钟