- 博客(19)
- 收藏
- 关注
原创 6.6 完数(project) educoder项目实训
一个小小完数,居然涉及如此广泛的数论知识,深刻提醒我数学在计算机领域的运用确实是十分广泛的,学习算法的路上,数学一定是一大助力。
2024-04-21 10:28:10 994 1
原创 贪心(贪婪)算法
这个题可以类比为现实生活中,在超市购物时,在你前方排队的人拿着一车的商品,而你只想买一瓶可乐,那么如果你先结账,他只需等待几秒,如果他先结账,那么你将会等待几分钟那么我们可以得知,对于局部而言,有 “结账时间短的优先结账可以节约时间” 的初步结论,并且显而易见,商品越少的人越早结账,就会越节约所有人的整体时间,可以由此推出整体结论。这就是贪心选择性质。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。
2024-04-20 11:40:46 917
原创 2024第十五届蓝桥杯 C/C++ B组 参赛经历分享(以及部分题解)
emmmmmm,dp杯居然不考dp了,蓝桥一直没怎么出过的高精度居然也考了(当时居然因为没太复习那块知识直接模拟混分了),题量也改了,总的来说反而简单了?。。。还好天津竞赛弱省,但愿能够省一吧。。。(图灵保佑)好那么进入正题。
2024-04-15 14:48:54 3601 10
原创 第十五届蓝桥杯模拟赛 第三期 (C++)
第二次做蓝桥模拟赛的博客记录,可能有很多不足的地方,如果大佬有更好的思路或者本文中出现错误,欢迎分享思路或者提出意见。
2024-03-24 22:46:16 4308 2
原创 蓝桥杯2022年第十三届省赛真题-统计子矩阵
直接二维前缀和然后暴力判断所有情况的话时间复杂度到了O(N^4),对于500的数量级的话会超时,但是题目中给出了元素非负的条件,那么我们就可以利用前缀和的单调性,去减少一层循环,具体代码如下。给定一个 N × M 的矩阵 A,请你统计有多少个子矩阵 (最小 1 × 1,最大 N × M) 满足子矩阵中所有数的和不超过给定的整数 K?对于 100% 的数据,1 ≤ N, M ≤ 500;对于 30% 的数据,N, M ≤ 20. 对于 70% 的数据,N, M ≤ 100.大小为 1 × 4 的有 1 个。
2023-12-09 21:19:11 611
原创 第十四届蓝桥杯 C++组省B 题目 子串简写
程序猿圈子里正在流行一种很新的简写方法:对于一个字符串,只保留首尾字符,将首尾字符之间的所有字符用这部分的长度代替。分析一下题目可得知,对于每一个c2,我们只需要知道在k个字符之前,出现过多少次c1,就有多少个子串可以被简写,所以用一个类似前缀和的数组维护c1在每次c2出现之前k个位置时出现的次数就行了。S 只包含小写字母。给定一个字符串 S 和两个字符 c1 和 c2,请你计算 S 有多少个以 c1 开头c2 结尾的子串可以采用这种简写?对于 20% 的数据,2 ≤ K ≤ |S | ≤ 10000。
2023-12-08 20:26:16 451 1
原创 蓝桥备战 C++中的STL容器(2)—— stack
stack就是数据结构——栈的模板容器类,栈是一种只有一个出入口的容器,其能被访问的结点只有栈顶,能做的操作也较少,所以stack容器对应的函数也不多,由于模板编程的便利,也基本不存在非类型重载的重载,所以本篇内容较为简单和简短,不过值得一提的是, 栈的思想在很多题目或者实际应用中是非常常见的,所以本篇会提及几个能用栈思想解决的问题。首先仍然需要导入一个库stack的操作函数实在是比较少,所以我们不分类讨论了,函数模板如下。
2023-12-06 14:52:55 482 1
原创 高精度算法(大数加减乘除)
在C/C++的算法题中有时候会遇见这样一类问题,数据实在是太大了,就连unsigned long long也不能描述这样的数据(数据已经大于了264),遇见这样的数据,我们就需要使用高精度来进行描述了高精度的主要思想是将数位拆分并单独对每一位进行存储,有多种高精度描述数据的方法,比如int型的数组,字符串等等方式,在这里我们所使用的方法是使用vector即int型的动态数组进行数据的描述新手向基础算法教程,所以我们此处只提到大数加减乘除。
2023-12-05 08:49:49 1370 1
原创 蓝桥备战 C++中的STL容器(1) —— vector
vector是一个动态的,可以存放任意数据类型(甚至类及其对象)的顺序(或者说线性的)容器类,在蓝桥杯中,我们一般将其用做动态数组。
2023-12-03 21:35:44 475 2
原创 二分查找算法
在更多的题目中,二分查找法往往伴随其他算法一同出现来进一步减少时间复杂度,C++的库中,有upper_bound(x):找到有序序列中第一个大于x的数,lower_bound(x):找到有序序列中第一个小于的数,这两个函数也是基于二分查找算法实现的。区间[l,r]被划分成[l,mid-1]和[mid,r]时使用。//区间从[ l , r ]更新为 [ l , mid-1 ]区间[l,r]被划分成[l,mid]和[mid+1,r]时使用。//反之位于[ l , mid-1 ]
2023-12-02 10:12:52 360 1
原创 二维前缀和与差分
公式为 sum = s[x2][y2] + s[x1-1][y1-1] - s[x1-1][y2] - s[x2][y1-1];公式为 s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + a[i][j];前缀和数组中 每个元素s[i]的含义都是 从原数组的第一个数a[1]到第i个数a[i]的和。对一个二维数组的 坐标(x1,y1) 到 坐标(x2,y2)的矩阵中全部元素+c。从坐标(1,1)到坐标(i,j)的矩阵中全部元素的和。那么如何构建这样的二维前缀和数组。
2023-12-02 09:00:56 975
原创 一维前缀和与差分
/得到q[0],q[1],......,(q[l]+c),(q[l+1]+c),......,(q[r]+c),q[r+1],q[r+2],......,q[n]//对应的,q数组变成 (q[r+1]+c-c), (q[r+2]+c-c), ......, (q[n]+c-c);//则q数组变成 (q[l]+c) , (q[l+1]+c), ....., (q[n] + c);差分数组 b[n] b[i] = q[i] - q[i-1];s[i] = s[i-1] + a[i] (前缀和推导式)
2023-12-02 08:53:08 357 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人