随笔分类 -  题解

摘要:CF575G BFS + 贪心 2200* 我们可以发现,答案即为从终点到起点拼接组成的最小的十进制数字,设 \(s\) 为终点,\(t\) 为起点。 从 \(s\) 出发,我们可以贪心的进行决策,对于任意两条边,我们会优先比较哪条边离 \(t\) 更近,其次才是边权的大小,对于哪条边离终点更近,我 阅读全文
posted @ 2025-07-19 17:20 Zheng_iii 阅读(45) 评论(0) 推荐(0)
摘要:abc210 D 动态规划 很普通的 dp 题,设计状态 \(f_{i,j}\) 为目前只设了一个车站的最小花费,每次转移要么更改车站位置要么从左边或上边的车站走过来,同时记录答案即可。 由于初始车站只会在终点车站的左上角,所以我们还需要将整个 \(a\) 数组反转一下重新 dp 一遍。 #defi 阅读全文
posted @ 2025-07-18 22:54 Zheng_iii 阅读(15) 评论(0) 推荐(0)
摘要:abc205 D 二分 + 前缀和 我们对每两个相邻 \(a\) 数组元素的距离做前缀和,我们通过二分即可以得到答案的区间,使用我们已经预处理过的前缀和数组即可得到前缀 \(a\) 数组元素的数量,让它与 \(k\)​ 相加即可。 inline void solve() { int n,m; fin 阅读全文
posted @ 2025-07-11 18:12 Zheng_iii 阅读(28) 评论(0) 推荐(0)
摘要:abc200 D 二进制枚举子集+抽屉原理 简单的抽屉原理 在 \(201\) 个序列中必定有两个序列模 \(200\) 同余。 二进制枚举前 \(8\)​ 个元素的子集即可。 std::unordered_map<int,std::vector<int>> mp; inline void solv 阅读全文
posted @ 2025-07-08 18:17 Zheng_iii 阅读(71) 评论(0) 推荐(0)
摘要:题意简介 在二维网格平面上有 \(N\) 个球员,球最初位于第 \(1\) 个球员处。我们需要将球转移到第 \(N\) 个球员处,求所有球员疲劳度之和的最小值。 持球的球员可以选择踢球或运球,不持球的球员只能进行移动,踢球时可以从东南西北中选定一个方向将球踢出 \(p\) 米,所提升的疲劳度为 \( 阅读全文
posted @ 2025-04-19 00:29 Zheng_iii 阅读(15) 评论(0) 推荐(0)
摘要:ABC399 G - Colorful Spanning Tree 题解搬运+翻译 G - 彩色生成树 题解 这个问题涉及拟阵交集。虽然解决一般的拟阵交集问题需要复杂的算法,但对于称为线性拟阵交集的特殊情况,有一个简单的随机化算法,无需复杂的实现。 拟阵的定义 一个有限集合 \(E\) 和它的一个子 阅读全文
posted @ 2025-03-29 22:14 Zheng_iii 阅读(90) 评论(0) 推荐(0)
摘要:A - Doors in the Center 问题陈述 找出满足以下所有条件的长度为 \(N\) 的字符串: 每个字符都是 - 或 =。 它是一个回文字符串。 正好包含一个或两个 =。如果包含两个 =,它们是相邻的。 这样的字符串是唯一的。 解题思路 简单构造题,把 '=' 构造到中间即可,偶数时 阅读全文
posted @ 2025-03-22 21:49 Zheng_iii 阅读(179) 评论(0) 推荐(0)
摘要:题目链接 https://www.luogu.com.cn/problem/P3201 题目简介 P3201 [HNOI2009] 梦幻布丁 题目描述 \(n\) 个布丁摆成一行,进行 \(m\) 次操作。每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色。 \(1 \leq 阅读全文
posted @ 2025-03-10 21:27 Zheng_iii 阅读(38) 评论(0) 推荐(0)
摘要:解题思路 对于两种操作, install : 求从根节点到当前节点这段路径中没有被安装过的软件数量。 unstall : 求当前子树没有被安装过的软件数量。 很显然,对于这两种操作,树链剖分算法是很不错的选择。 AC 代码 #include<bits/stdc++.h> #define debug( 阅读全文
posted @ 2025-03-09 21:52 Zheng_iii 阅读(11) 评论(0) 推荐(0)
摘要:思路 这道题思路很简单,但是坑比较多。 首先第一个坑点就是sqrt函数的精度问题,解决这个问题还是比较简单的,我们不sqrt就可以了。 因为我们开不开方对于我们距离的大小关系是没有任何影响的,在这个问题我们不需要知道距离的精确值,大小关系才是我们需要的东西。 但是我们的另一个问题就出来了,\(a_i 阅读全文
posted @ 2025-03-08 18:34 Zheng_iii 阅读(24) 评论(0) 推荐(0)
摘要:前置知识 今天把矩阵快速幂又复习了一遍,来博客上水一篇题解吧。 总而言之,矩阵快速幂 = 矩阵乘法 + 快速幂。 那矩阵乘法是什么呢? 设有两个矩阵 $ A $ 和 $ B $,其中 $ A $ 是一个 $ m \times n $ 矩阵,$ B $ 是一个 $ n \times p $ 矩阵。它们 阅读全文
posted @ 2025-03-06 19:56 Zheng_iii 阅读(118) 评论(0) 推荐(0)
摘要:题目描述 这里有一个\(N \times M\)的二维数组。 松鼠从\((1,1)\)开始行动。 每次可以选择往下走或者往右走。 松鼠每达到一个点就可以获得这个点所有的松果。 求松鼠走到点$(N,M) $最多能够获得多少松果。 解题思路 通过题目描述,我们可以得知每次移动只能往下或者往右。 由此我们 阅读全文
posted @ 2025-03-05 22:01 Zheng_iii 阅读(45) 评论(0) 推荐(0)
摘要:比赛链接 https://ac.nowcoder.com/acm/contest/102896 和猫猫一起起舞! 评价 签到题1,if判断即可。 AC代码 #include<bits/stdc++.h> #define debug(a) cout<<#a<<"="<<a<<'\n'; #define 阅读全文
posted @ 2025-03-02 21:22 Zheng_iii 阅读(63) 评论(0) 推荐(0)
摘要:思路 重链剖分板子题,用线段树维护剖分过的线性结构即可。 AC代码 #include<bits/stdc++.h> #define ll long long #define re register int using namespace std; const int maxn=30005; cons 阅读全文
posted @ 2025-03-02 20:40 Zheng_iii 阅读(11) 评论(0) 推荐(0)
摘要:思路 ST表是一种基于倍增思想的预处理算法。 倍增算法的用处: 变化了k次,k次之后是啥 用了二进制的思想 st[s][i] s是起点,跳2^i步 位运算时间复杂度为O(1) 推荐阅读资料:https://oi-wiki.org/ds/sparse-table/ AC代码 #include <bit 阅读全文
posted @ 2025-03-02 14:45 Zheng_iii 阅读(32) 评论(0) 推荐(0)
摘要:PS:由于作者后60分钟选择先做G题,所以他F和G都没做出来() A - Strictly Increasing? 问题陈述 给你一个正整数 \(N\) 和一个长度为 \(N\) 的正整数序列 \(A = (A_1,A_2,\dots,A_N)\) 。 请判断 \(A\) 是否严格递增,即 \(A_ 阅读全文
posted @ 2025-03-01 21:41 Zheng_iii 阅读(64) 评论(0) 推荐(0)
摘要:思路 这是一道用链表就能实现的模拟题(个人感觉评橙会更好)。 我们可以使用结构体来存储节点的左手和右手。 这道题也可以直接使用STL中的list。(但是完全没有必要。。。) 对于已经删除的节点,我们不需要真的删除。 我们只需要给这个节点打一个标记,在输出答案的时候跳过它即可。 AC代码 #inclu 阅读全文
posted @ 2025-03-01 15:38 Zheng_iii 阅读(34) 评论(0) 推荐(0)
摘要:很水的单调队列板子题。 在单调队列处理数组最大值的途中当队列大小大于K时输出队列最前端的数即可。 AC代码 #include<bits/stdc++.h> #define debug(a) cout<<#a<<"="<<a<<'\n'; #define il inline #define inf 0 阅读全文
posted @ 2025-03-01 15:22 Zheng_iii 阅读(9) 评论(0) 推荐(0)
摘要:虽然标签是单调队列优化DP。 但这道题是一道很典的前缀和+单调栈。 预处理完前缀和后分别从左往右和从右往左把每个点的最大&最小的边界条件预处理出来。 最后对所有可能线性询问一次,取最大值。 时间复杂度O(n)。 AC 代码 `#include<bits/stdc++.h> #define debug 阅读全文
posted @ 2025-03-01 15:11 Zheng_iii 阅读(12) 评论(0) 推荐(0)
摘要:思路 这是一道 DFS 的题,我们把题中的超长数字串转换成边和点的信息,由于它需要字典序最小的路径,我们把每个点所连向的点的编号从小到大进行排序,然后使用数组来记录该点是否被更新过,第一个没有被更新过的点一定是当前答案的最优解。 记得判自环。 AC 代码 #include<bits/stdc++.h 阅读全文
posted @ 2024-12-29 00:55 Zheng_iii 阅读(59) 评论(0) 推荐(0)