合集-3.26~4.13 蓝桥杯省赛备赛

摘要:题意:n个零食,每个零食有k种配料,一共有m种配料。问最少吃几包零食,可以吃到所有配料。 n <= 100, m <= 20, k <= m。 思路:最优化问题,如果n <= 20可以直接bf,这里m <= 20,对m进行状态压缩,正确的解法应该是线性dp + 状态压缩。 总结:很容易陷入一个哈密顿 阅读全文
posted @ 2024-03-25 09:56 _Yxc 阅读(28) 评论(0) 推荐(0) 编辑
摘要:题意:求非空连续子区间最大和 思路:贪心解决。 void solve(){ int n; cin >> n; long long ans = -1e18; long long cur = 0; for (int i = 0; i < n; ++i){ int t; cin >> t; cur += 阅读全文
posted @ 2024-03-25 12:41 _Yxc 阅读(6) 评论(0) 推荐(0) 编辑
摘要:1: 实现路径压缩并查集,查找,合并,判同集合。 2: 获取集合大小,集合数量。 3: 增加权重,查询单个元素到集合代表元素的权重。 4: 增加获取集合中元素的功能。 以C++的三大特性之一封装来写该模块,代码量大概是90行左右。 用到的库: vector, nnumeric(iota函数)。 cl 阅读全文
posted @ 2024-03-25 13:25 _Yxc 阅读(6) 评论(0) 推荐(0) 编辑
摘要:题意:n个点,m条边,问有哪条边是去掉之后,会造成之前连通的点不再连通的?n <= 150, m <= 5000. 思路:连通算法有dfs+bool数组记录,或者dsu,感觉dsu更方便。m * n 不超过1e6,直接暴力。 class DisjointSet{ public: DisjointSe 阅读全文
posted @ 2024-03-26 09:35 _Yxc 阅读(14) 评论(0) 推荐(0) 编辑
摘要:1 根据长度初始化, 单点更新, 区间查询。 可以查询区间和(输入为位置+数值), 可以查询区间内频次(输入为数值+频次1)。 2 根据输入数据线性初始化。 3 根据输入数据频次线性初始化,区间更新,单点查询。 根据差分后的数组求前缀和(单点查询)。 class FenwickTree{ publi 阅读全文
posted @ 2024-03-26 13:06 _Yxc 阅读(8) 评论(0) 推荐(0) 编辑
摘要:class FenwickTree{ public: FenwickTree(int sz): sz_(sz){ ft_.resize(sz_); } FenwickTree(vector<long long>& f){ sz_ = int(f.size()); ft_.assign(sz_, 0) 阅读全文
posted @ 2024-03-26 13:09 _Yxc 阅读(9) 评论(0) 推荐(0) 编辑
摘要:class FenwickTree{ public: FenwickTree(int sz): sz_(sz){ ft_.resize(sz_); } FenwickTree(vector<long long>& f){ sz_ = int(f.size()); ft_.assign(sz_, 0) 阅读全文
posted @ 2024-03-26 13:14 _Yxc 阅读(19) 评论(0) 推荐(0) 编辑
摘要:题意:n * m的方格,有的格子是数字,是数字的格子代表了相邻(包括自己)的9个格子内颜色值为1的格子有这么多个。给出这个方格,求满足条件的颜色方格,保证答案唯一。 n <= 10, m <= 10。 思路:想不出好办法,直接暴力+剪枝。 暴力好说,01dfs即可,关键是如何剪枝。剪枝肯定是已经不会 阅读全文
posted @ 2024-03-26 17:25 _Yxc 阅读(63) 评论(0) 推荐(0) 编辑
摘要:题意:区间长度为n,m个查询。每次查询给出区间与一个数值0或者1,代表区间内的1的个数。找出不矛盾的最后一个询问。 思路:首先用到区间压缩,排序后去重即可。使用带权dsu,如果是同一个root,那么xor运算看是否符合输入。如果不是同一个root,直接合并。这里合并区间的时候权重更新有点抽象,xx合 阅读全文
posted @ 2024-03-27 10:26 _Yxc 阅读(18) 评论(0) 推荐(0) 编辑
摘要:写模板: 1 确定树的节点指针数量 2 确定起始字符 3 实现插入方法 4 根据题目编写求解方法,或者添加计数元素到节点中 struct Node{ array<int, 100> next{}; int cnt = 0; }; class Trie{ public: Trie(char start 阅读全文
posted @ 2024-03-27 13:19 _Yxc 阅读(64) 评论(0) 推荐(0) 编辑
摘要:1 为什么要写kmp? 因为find暴力匹配函数,时间复杂度过高,因为s串指针回溯问题。 2 为了避免s串指针回溯,对t串构建kmp表,该表记录了当前位置匹配失效时,下一个比较的下标。 3 原理?next表表示了当前下标j的最长公共前后缀长度,因为下标从0开始,这个长度也是最长公共前缀的下一个位置, 阅读全文
posted @ 2024-03-27 17:30 _Yxc 阅读(9) 评论(0) 推荐(0) 编辑
摘要:基于有根树。 1 作用:可以找到离两个点最近的公共点,这个公共点也可以作为唯一路径的一个中间点。如果记录了两个点到这个公共点的一些数据,就可以处理一些问题。 2 实现方法:基于倍增的思想,对每个点记录了2的整数次方的距离条件下的每个祖先,可以通过递推来解决。 3 注意事项:最大深度应该是不超过n的一 阅读全文
posted @ 2024-03-28 09:53 _Yxc 阅读(8) 评论(0) 推荐(0) 编辑
摘要:题意:n个点m条边的图,q个询问,每个询问指定两个点u和v。问从u到v的路径中,最小权重的最大值最多是多少。 思路:step1,因为是图,所以路径有很多。这里基于贪念的思想,优先选择权重大的边走,找出一条最合适的路径。 所以直接对图构建最大生成树,让每个连通块的路径都是最大路径。 step2,构建最 阅读全文
posted @ 2024-03-28 09:58 _Yxc 阅读(6) 评论(0) 推荐(0) 编辑
摘要:1 意义:线段是是为了对区间中的元素进行操作,而衍生出来的一种数据结构,比如区间加减,区间求和。 线段树将1~n的区间分解成4n个小区间。 2 过程:区间修改就是对一个或者多个节点按照设定的规则对数值进行修改。区间查询就是对一个或多个节点查询的结果按规则进行合并,得到最终结果。 其中区间修改增加了懒 阅读全文
posted @ 2024-03-28 13:46 _Yxc 阅读(7) 评论(0) 推荐(0) 编辑
摘要:题意:n个点,求出每个点的左边,右边,第一个比他高的点。 思路:单调栈。 void solve(){ int n; cin >> n; vector<int> a(n); for (auto&x : a){ cin >> x; } stack<int> stk; vector<pair<int, i 阅读全文
posted @ 2024-03-29 09:18 _Yxc 阅读(9) 评论(0) 推荐(0) 编辑
摘要:题意: 区间更新区间查询 思路:直接线段树实现就行,难点还是手撕线段树的结构跟细节。 说一下merge:直接对两个区间的sum求和。applyLazy:lazy值*区间长度。 struct Node{ bool is_lazy; long long sum = 0; long long lazy_v 阅读全文
posted @ 2024-03-29 10:50 _Yxc 阅读(7) 评论(0) 推荐(0) 编辑
摘要:A 工作时长 题意:若干条打卡记录字符串(年月日时分秒格式),保证打卡记录相邻。求该年工作时长。 思路:对字符串处理,转换格式为秒数,排序后相邻相减求和。 总结:2月有29天的情况要被4整除,如果能被100整除的话,一定要被400整除。 struct Data{ int month;//5 int 阅读全文
posted @ 2024-04-01 10:20 _Yxc 阅读(13) 评论(0) 推荐(0) 编辑
摘要:筛质数: 1 需要:bitset位标记,vector存储质数 2 流程:标记了就是质数,加到vector。用当前数遍历所有已知质数进行标记,直到质数跑完或者质数为当前数的因子。 3 注意事项: 合数被标记的原理是因为每个合数都由最小质因子来标记,所以当质因子为i的因子时,直接break。 4 延申: 阅读全文
posted @ 2024-04-01 13:43 _Yxc 阅读(12) 评论(0) 推荐(0) 编辑
摘要:1 范围内,每个数的质数及其出现次数 2 单个数的因子 3 单个数的因子数量 vector<vector<pair<int, int>>> prime_range; void sieveRangePrimes(int x = 1e7){ prime_range.resize(x + 1); for 阅读全文
posted @ 2024-04-02 13:49 _Yxc 阅读(14) 评论(0) 推荐(0) 编辑
摘要:题意:30000列军队,每列初始有1个。编号从1~30000.每次操作有两种,将现在第i列所在的列合并到第j列所在列的末尾。 或者查询第i列举例第j列的距离。 思路:带权并查集。合并时将第i列头节点接到第j列头节点上。然后直接查询dist取绝对值相减就好。 总结:一开始没看清题,以为要把从i列从当前 阅读全文
posted @ 2024-04-04 10:18 _Yxc 阅读(18) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示