
蓝桥杯备战
wniuniu_
https://niuniu0101.github.io/
展开
-
划分型dp+倍率转换为后缀
的写法,最外层的循环枚举分割的次数(最多为1000),里层的循环分别枚举左边界和右边界,其实这么麻烦就是为了解决i*k的问题。前言:写这个题目的时候想了好久,但是只能想到一个复杂度为。正确的思路应该是转换成后缀来写。原创 2025-03-30 22:17:04 · 235 阅读 · 0 评论 -
dfs?背包?动态规划?dfs减枝!
我们再维护一个后缀和,我们当前西瓜的重量如果加上后缀的西瓜的总重量还是达不到我们的目标,就剪枝。首先我们要先把西瓜按照大到小进行一个排序,这样十分有助于我们快速排除一个非法的情况。这个题目还是比较好拿分的,其实要想清楚,一个瓜如果被劈开了,那么一定只会用到一半。这个问题可以理解为拿与不拿问题,我们可以写一个子集回溯的问题,见下面第一个代码。但是有很多测试集超时了,我其实想写一个背包,但是值域范围到了。我的这个dfs写法是枚举的是方案,不如写成枚举每一位。,没办法写成背包,而且也难以写成动态规划。原创 2025-03-13 21:35:42 · 232 阅读 · 0 评论 -
最短路的方案数+打印路径
可能有的疑惑是为什么路径相等的时候不再次将这个节点push到堆中,这是因为我们的堆中肯定存在这个节点了,且一定没有遍历到,这是因为我们的当前的距离是d , 而v节点的距离dis[v] == d + w,这么说dis[v]大于d,那么v节点一定存在于堆中,我们就没必要重复push进去了。要弄清楚的就是距离相同的时候,如何进行转换,距离相同的时候,救援队的数量就是我们需要考虑的因素,我们直接采取新的路径就行。简单的来说,要增加啥新的功能,直接多开全局变量就行,没必要写在优先队列里面,不好转换。原创 2025-02-21 23:01:16 · 245 阅读 · 0 评论 -
合理建模--最短路径
主要是这个题目不能用bfs来写,因为距离并不是1。狄克斯特拉算法很久没写了,有些地方生疏了。这道题目难就难在如何想到用最短路径来做。且这个题目需要记录三个信息,得用。原创 2025-02-21 17:18:32 · 179 阅读 · 0 评论 -
转换问题--贪心
这个题目本质上就是为了构建一个字典序最小的,所以我们需要把0都移动到前面去,这个是核心。所以问题就转换成如何使用题目给的次数把0都尽可能移动到前面去。原创 2025-02-21 14:31:51 · 188 阅读 · 0 评论 -
选与不选?从暴力枚举到背包dp
这个题目我的定义就是 dp[ i ] [ j ] 为使用了i块地毯,到第 j 个位置能够覆盖的白色区域的最大数量,我省略了第一个维度的空间。如果我们进行dfs进行枚举的话,复杂度可能吃不消,我们借鉴背包的思路,背包的思路本质就是枚举每一个物品选与不选。很多时候我们都会遇到一些题目,给出很多个位置,在这个位置进行操作或者不进行操作,我们称之为选与不选问题。现在有几个难点就是如何快速算出 j 前面的最小值,以及每次算完后如何更新整个的答案区间呢。注意的是,我们的转移方程是。原创 2025-02-21 10:08:47 · 667 阅读 · 0 评论 -
python中字典用法
在蓝桥杯Python组的竞赛中,dict是一种非常常用的数据结构,主要用于高效地存储和查找键值对。字典的常见用法包括统计频率、记录索引、优化查找等。原创 2025-01-24 17:15:47 · 453 阅读 · 0 评论 -
python怎么搞定输入??
使用input()函数可以接收用户输入,输入内容默认是字符串。如果需要接收数字输入,可以使用int()或float()进行类型转换。使用split()方法可以接收多个输入。原创 2025-01-17 17:16:52 · 408 阅读 · 1 评论 -
LogTrick求解类集合问题
这种情况下,b就已经在集合a中了,就没必要把b加入集合a中了。维护为以 i 为右节点的集合,集合的值为。,(这个定义一定要懂,否则写出来容易超时。这种题目可以理解为集合问题,原创 2025-01-17 10:26:22 · 272 阅读 · 0 评论 -
暴力模拟题
【代码】暴力模拟题。原创 2025-01-08 15:37:17 · 116 阅读 · 0 评论 -
星期计算 快速幂乘法
前言:一开始看到这个题目的时候感觉很奇怪,后来才发现是一个快速幂乘法的题目。是多少就行,我们的python有内置的pow可以实现快速幂的求解。这个题目我们其实只要知道这个。原创 2024-11-20 15:35:55 · 179 阅读 · 1 评论 -
快速幂 算法
我们注意到 (a * b) % c = (a % c + b % c ) % c。我们可以每次for循环中 对 ans 取模一次。不过时间复杂度还是没有优化。我们可以采用暴力算法。不过这样肯定会超时的。原创 2024-01-20 15:25:59 · 400 阅读 · 0 评论 -
蓝桥杯备战 每日一题 (4)
然后这个题目要怎么分析呢,首先的话 边长 为 n - 1 ,因为每边都是 n 个点,这是要注意的地方,然后我们每次只考了边长为 i 的正方形,发现有 n - i 个,包括自身以外,还有 i- 1 个斜着的正方形。我们可以每次计算就可以取余一次,这样就保证了最后取余的结果和一起相加再取余的结果一样。1 加法:(a+b)%m=(a%m+b%m)%m。2 减法:(a-b)%m=(a%m-b%m)%m。3 乘法:a*b%m=(a%m)*(b%m)%m。首先我们要有一个知识储备。原创 2024-01-20 10:45:45 · 750 阅读 · 0 评论 -
蓝桥杯备战 每日一题 (3)
那么对于两台手机测试 i 次能测试的高度,一个测试高度包括什么,包括如果每次在 m = n /2 处测试的时候,用一部手机用 i -1 次可以测试完剩下的手机,如果是第一次摔坏了,还能测试 i - 1 ,加上第一次测试的,就测试了 i 层,如果没摔坏,那么可以视作用 两台手机测 i -1 次,即 a[i-1] 层。如何分析这个问题呢,咋一看如果采用二分的话,由于只给了三个测试样品,这样会导致三个测试样品根本不够用,那么应该怎么操作呢?所属于类型:动态规划。原创 2024-01-20 09:46:05 · 767 阅读 · 0 评论 -
处理好 c++ 数组初始值的问题
如果初始部分的值的话,分两种情况,如果是 b[0] = 1 ,b[1] = 2 这种初始方式的话,其他没有初始的位置还是随机的值。如果是 int c[10] = { 1,2 } 这种初始化方法的话,那么没有初始化的地方,会默认为 0。如果是全局变量没有初始化,例如 a[10] 那么里面的所有值都默认为 0。我们来看看上面的代码,上面的代码输出是什么,如何处理默认值的问题呢。对于局部变量b[10] ,如果不初始化,那么就是随机的值。原创 2024-01-19 20:14:11 · 575 阅读 · 0 评论 -
如何使用万能头 #include<bits/stdc++.h>
它是C++中支持的一个几乎万能的头文件,几乎包含所有的可用到的C++库函数。以后写代码就可以直接引用这一个头文件了,不需要在写一大堆vector、string、map、stack……我们需要找到下面类似这个路径,大家的路径可能不太一样,不过都包含 VC\Tools\MSVC 和 include 这两个子路径。准备蓝桥杯的时候看到了很多头文件包含了这个头文件,后来查了一下。然后在 vc 里面写代码的时候就可以用这个头文件了。找到这个路径以后我们需要新建一个文件夹 bits。我们该如何使用这个头文件呢?原创 2024-01-19 19:30:09 · 2743 阅读 · 0 评论 -
蓝桥杯备战 每日一题 (2)
迭代更新最短路径:通过遍历所有节点,对于每一对节点 (i, j),检查是否存在一个中间节点 k,使得从节点 i 到节点 j 经过节点 k 的路径长度比直接从 i 到 j 的路径更短。如果存在这样的中间节点 k,则更新距离矩阵中节点 i 到节点 j 的最短路径长度为经过节点 k 的路径长度。算法的基本思路是通过逐步迭代更新节点对之间的最短路径长度,直到得到所有节点对之间的最短路径。初始时,距离矩阵的值为图中节点之间的直接距离,如果两个节点之间没有直接边相连,则距离为无穷大。有一个小细节,初始化数组的时候。原创 2024-01-19 18:48:41 · 733 阅读 · 0 评论 -
蓝桥备战 每日一题 (1)
5 的上标是 2 ,所以会有两次贡献,然后就使用二分的方法来完成就行,还有 处理 mid 的时候,没有使用 ( s + r ) / 2, 这是因为如果 s 和 r 很大的话,相加起来可能会超过 long long的范围。这个代码比较难以懂的就是 query 函数那里求解 从 1 到 n 中是 5 的倍数的累加,这里不是单纯的累加,如果一个数 是 25 ,那么这个数 对 5 的累加可以贡献两次,因为。原创 2024-01-17 16:03:35 · 496 阅读 · 0 评论