自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 蓝桥杯2022年第十三届省赛真题-求和

前年的题好简单,比去年好搞多了,第一题求和一眼就是前缀和的板子题。一遍ac的感觉真的好爽,这届题有一道能让我有这感觉就好了。

2024-04-08 10:52:17 166

原创 高精度加,减法模版

高精度算法存在理由是有些大大大数据连longlong都存不下得时候我们就要换种思路曲线救国,虽然数字位数比较有限,但是数组能开的很大啊,所以高精度的核心就是用数组模拟我们运算的过程。以前感觉高精度都是大企业开发要考虑的问题,我八百年碰不上呢,结果刚巧昨天看见蓝桥杯的A题就是个高精度的题,直接懵了,这东西就是板子,学过就会,没学过就不会。主要原理也不难,我们就花两个小时把高精度加减乘除给学了,以后见到直接用了,首先介绍的是高精度加法。这里直接把高精度加法的模版给出。

2024-03-22 12:26:55 233

原创 冶炼金属---蓝桥杯c++B组真题

首先我们注意到这是个找边界的问题,并且集合中的元素存在单调性(从1到1e9)。其实这就是我们标准二分的模版,参考之前的数的范围那个题,只能说一摸一样,分别用两次二分寻找满足条件的最小情况和最大情况,输出就可以了,时间复杂度在logn的级别,9到10次运算就ok了。本题当然可以简单的模拟题目含义,暴力去做,把v从1枚举到1e9,找哪两个数分别使得a/x等于b,并且是该情况的边界,但这样的时间复杂度是n,对于1e9来说是会超时的,我们要想办法优化。

2024-03-21 13:51:03 318 1

原创 分巧克力---第八届蓝桥杯省赛c++A,B组

本题还有一个数学方面的思考,就是给定长,宽和正方形的边长,怎么求该长方形内最多能有几个该正方形呢,其实由于除法向下取整的性质,我们直接(长/边长)*(宽/边长),//由于分别是长和宽能容纳的最大边长个数,相乘就是该二维长方形能容纳正方形的个数。对于满足某个条件的单调最值问题,我们应该下意识考虑二分,我们分析本题的条件,要找一个边长最大值使得我们所有的巧克力切出该边长的正方形的数量大于等于人数,由于我们的边长一定在1到1e5之间,我们要在这个单调区间内找到一个满足条件的最大值。

2024-03-21 12:05:56 418

原创 另一种数据下的Dijkstra算法---堆优化版

总而言之,堆优化dijkstra的核心思想就是利用堆的查询元素速度快:logn(说查询其实不准确,我们取得始终是小根堆的顶部,堆耗费的logn的时间其实主要是在调整堆的结构),来优化我们暴力遍历一遍的n的时间 ,其核心思想还是一样的:迭代n次,寻找所有元素到原点的最短距离来更新我们要确定的点距离原点的最短距离,用该以确定最短距离的点在去更新其他元素到原点的最短距离。之前我们介绍过dijkstra的基本思路和数据比较小的时候,没有用数据结构,仅用循环来实现该算法的基本操作,重在介绍理解核心思想。

2024-03-20 19:55:30 266

原创 Dijkstra求最短路模板

N个节点,如果每个节点都相互连接,若为无向图,则有CN 2,即 N*(N-1)/2 条边,若为有向图,则有 N*(N-1)条边。若题目给的是有向图,给定n,m的值,若m大于n*(n-1),则为稠密图;该算法的核心就是迭代遍历n次dist数组(所有未确定值的节点到原点的最小值),每找到更小的距离,用t变量记录更新最小距离,并在每次迭代完成,确定又一个点到原点的最小距离后,用该距离更新其他未确定到原点最小值的节点的最小值。觉得难以理解的八成是临界表或邻接矩阵学的出现问题,算法本身的思想很简单。

2024-03-19 23:05:22 523

原创 图中点的层次-----bfs在图里的应用(边权为1)

这道题就很好的结合了图的存储与遍历和bfs的应用,我们需要对前置技能书,图的存储与遍历和bfs在矩阵中的遍历给玩明白,才能对这种题下的动手。之前我们学习了bfs在矩阵中的应用,但大多数情况下我们bfs需要解决的问题是在图中遍历(更多是带权图,我们先学无权图一步步来)

2024-03-19 14:14:56 212

原创 走迷宫----bfs再矩阵图里的应用模版

bfs的算法我们是用队列这一数据结构实现的,为什么要用队列呢,这和这个算法的核心思想密切相关,bfs的核心就在于对当前能走到的所有点进行扩展,然后再对第一次扩展到的点找到它所能到达的所有点进行扩展,不断从起点扩展这个图直到扩展到终点。注意,在扩展完当前点能走到的所有点以后这个点就可以不要了,我们始终保留站在地图最前沿的那一批开拓者,看开拓者的位置是否为终点即可(因为一个点只要进行开拓操作,那它就一定不是终点,否则直接跳出循环就不去开拓了),不断开拓直到找到终点。回忆一下dfs的代码。

2024-03-19 13:08:11 532

原创 数组模拟单链表

那是因为图的点和点之间是有联系的,想要表示这种联系,仅仅用只能存值的数组显然是做不到的(只能存节点是谁,存不下和谁又联系),而链表由于具有数值域和指针域可以很好的存下该节点是什么,并且它的下一个节点是谁。而存图(稀疏图)的主流方法是邻接表,一看人家又是e[N],ne[N]又是idx的,h[N]更是抽象的不行,然后接着找,发现邻接表的前置技能树是数组模拟链表,好家伙,又去学,虽然还是很抽象,但起码算是硬啃理解了。1.在头节点插入元素(!值为5对应的ne应该是-1的,画的时候顺手了!2.在第k个元素后插入x。

2024-03-18 19:42:01 827 1

原创 树的重心-----图的存储与dfs遍历模版

如何找删除某节点的情况下得到的联通块的最大值呢,我们可以遍历该被删除节点的子树节点有几个,同时他头上的联通块我们可以用n(总结点数)减去该被删除节点的子树节点,剩余的就是与他父节点(头上)相连通的节点,我们在各个子树和头上的联通块的个数里取一个最大值,就是我们删掉该节点后剩余联通块的最大值。本题要找在所有删掉一个节点的情况中得到的最大联通块的最小值 (反复读这句话),也就是说,我们要遍历每一个节点,并求出删除该节点的情况下得到的联通块的最大值,并在遍历完后的到的所有最大联通块中取最小值输出。

2024-03-18 14:16:01 1070 1

原创 走迷宫---dfs在矩阵图里的应用模板

(本题要用bfs写,dfs会超时,但dfs找路径的核心思想是很值得学习的,而且dfs比bfs的代码更简洁更好理解,打oi赛制是可以得到部分分的)dfs算法解决迷宫问题的一个标准模板 ,通过递归与回溯暴力遍历所有能走的点,并比较找出所有可行方案的最优解。解决这道问题的核心思想和组合数如出一辙,可以说是组合数的升级版。结合注释看dfs更清晰易懂,这里不再空对空的讲述了。

2024-03-17 21:13:45 215 1

原创 Fair Division----一道比较有意思的模拟题

对于模拟暂时找不到规律的题,就开始想算法了,看见标签中有dp,想试试dp写法,但是dp是求某个集合中的最优解,而不是判断状态,无从下手(有大佬会拿这个写dp的话给个链接让我学习下 )一开始想着算出总重量sum,看sum是否为偶数即可,但是对于2 2 2的数据会卡,然后又想如果n为偶数且sum为偶数即可,但1 1 2的n不是偶数,但也可以平均分。当n为奇数时,看1的个数,1为偶数时,2为奇数,让2少的一边分两个1,即判断1的个数减2是否仍大于零;将上述if else 模拟成代码得到ac代码。

2024-03-17 15:01:23 341 1

原创 排列数字----dfs的基础模版

u代表你当前站在哪个箱子面前。而在第u个箱子面前我们的操作是:用i循环遍历0号卡到最后一张卡牌,依次检查还在不在自己手上,如果不在,用过了(check(i)==true),则不操作这张牌,for循环到下一张牌检查下一张牌是否在手里,若不在,继续找下下一张,直到所有牌都用过(i==n)为止,此时对应循环结束。如果第i张牌还在手里,我们则对其进行如下操作:将牌放到当前u号箱子里,并记录一下(path【u】=i),记录i号牌用掉了(check[i]=true),走到下一个箱子面前(dfs(u+1))

2024-03-14 13:32:22 575 1

原创 判断子序列----双指针比暴力更容易模拟出题目的案例

用i指针遍历a数组,j遍历b数组,只有当a中元素全部被b给匹配到才输出yes,否则输出no,若a中存在b中不存在的元素,i指针一定无法遍历完全部n个元素,i的值小于n,输出no。本题对两数组元素序列顺序也有要求,比起用两层循环反而是双指针更容易模拟出题目含义(双重循环由于有回退的部分不容易对题目进行模拟,而双指针恰好指针不用进行回退与题目含义符合)反而暴力不仅是n*2的复杂度,还需要额外记录每次匹配成功时的元素下标index,比较index的顺序是否有序进而判断a是否为b的子序列。

2024-03-13 22:36:17 373

原创 数组元素的目标和----双指针优化双循环的核心思想

双指针优化双循环的思想

2024-03-13 19:52:20 415

原创 最长连续不重复子序列----双指针模版题

本题的思想有点类似哈希表,用空间换取时间,我们可以发现在暴力中,在考虑新加入的a[j]在区间[i,j]是否出现过时,没必要一遍遍跑一遍从i到j,我们可以通过一个计数的数组(学过桶排序的可能更好理解),只要数组中某一个数出现的次数(被计数的次数)大于1时,这时该区间就不满足要求,我们让左端点不断向右移动,寻找下一个(无重复元素的)区间,我们通过这个计数的数组,实现了i和j关系的连接。

2024-03-13 19:10:31 378

原创 CodeForce Round 933(div.3) -----C题题解

笔者这里对kmp算法还是一知半解,但是本题大可不必用,遍历一遍字符串遇到俩单词让ans加一即可,同时一个小细节时map的尾巴和pie的头是一样的,如果遍历到mapie的时候,特判一下,不用销毁两个字符,只用销毁p即可。大致含义是一旦发现字符串中存在pie或者map单词就要去掉其中的一个字符将该单词销毁,问最少要销毁几个字符。

2024-03-12 01:38:11 174 1

原创 CodeForce Round 933(div.3) -----B题题解

其实发现没必要一个个枚举-1,我们最终只是要找到某一个值让a【i】为零,同时判断a[i+1]与a[i+2]是否小于零而已,也就是找一个被减数,更倾向与模板的说法是找一个0到1e9范围中的数,使小于他的都无法让a[i]变到零,大于他会使数列出现负数出问题。回到题目上来,本题的模拟核心思路就是单凡有一个不为零我就cout NO,所以我直接从第一个不为零的数直接开始枚举-1,一旦牵动着a[i+1]或者a[i+2]变成零了而我a[i]还没变回零,你就一定不能再把a【i】变成零,直接输出NO即可。

2024-03-12 01:31:43 244 1

原创 CodeForce Round 933(div.3) -----A题题解

没什么难度的签到题,数据范围也很小,直接暴力两层循环,一旦找到a[i]+b[j]小于等于k的情况就ans加一,为了复盘的完整性将其收录在题解里。大体翻译就是小明左边和右边口袋各有n和m个硬币,每个硬币的价值不同,用一下数组记录,问从左右口袋分别取一个硬币,总价值不超过k的方案数。

2024-03-12 01:10:57 230 1

原创 ZZU2024年迎新赛复盘----F题

到达第n号格子的方案数,其实也就是到达第n-1号格子的方案数加上n-2号格子的方案数。(因为想到n号只能由n-1或n-2号格子到达)换言之,就是后者状态由前者所决定,经典的状态转移方程,经典的dp,题解如下。但是,再比赛时看见又是对大数据取模输出又感觉是dp下意识直接跳过,实际静下心想想这题根本不难甚至之前学过无数次,这就是比赛打得少,经验问题和心态问题(都怪前缀和那道题endl卡我好久其他题都看得浮光掠影的)总之不要被大数据吓到,特别是题目描述少的题都不会太复杂,以上。

2024-03-11 00:24:37 186 1

原创 ZZU2024年迎新赛复盘----K题

此时我们发现规律,一旦sum-2>=n时,我们立即输出第i次,此时的i就是最小次数(注意这个一旦,4<=1+2+3+4+5+6+7+8+9-2=43也成立,但由于4<=1+2+3-2的时候就已经可以走到4了,就没必要多余操作了)如果是40级呢,先看40<1+2+3+4+5+6+7+8+9=45,此时可以让第一和第二步都走-1级,或者直接让第四步走-1级我们都可以到达40,也就是最少有9次。41呢,我们发现41<1+2+3+4+5+6+7+8+9=45,也可以调整第三步走-1级就可以了,最少9次。

2024-03-10 23:52:53 418 1

原创 ZZU2024年迎新赛复盘----I题

简单的遍历二维数组,这里又开了一个二维数组来保存每一行的状态,同时用max来记录最大是哪一行。

2024-03-10 22:41:01 157

原创 ZZU2024年迎新赛复盘----J题

对于题目告诉你的9011变为11,我们可以发现当某个位置变为-1不输出时,他的下一位可能时0,所以还要引入特例判断-1的下一位是不是零,这里引入position变量记录可能使首位为零的位置,若9001这样连续出现0的情况,我们需要在发现第一个首位0后让position++看首位0的下一个是否还是0,这样10086这种例子也能过了。最后是10000这样的数据,他输出为空,这个特例要特殊处理,好在处理起来也简单,引入flag变量初始为0,如果有输出变为1,如果循环输出完还是没0(没有输出)就专门输出一个0。

2024-03-10 22:07:37 327

原创 ZZU2024年迎新赛复盘----L题

一道前缀和的板子题,思路一目了然,甚至题目连没学过前缀和的同学都能暴力写出一个过小样例的代码,但是注意数据范围1e6,就算用上前缀和,q次询问加上暴力的n次循环(从0到n找前缀和数组中某个值是否大于sum),直接到1e12的运算量,我们不得不再一次优化算法。但是,笔者在比赛的时候还是tle了,为什么呢,细节决定成败,在本题用endl换行会在输出-1时卡住,具体原因不详,但学长大佬一致认为能用'\n'别用endl,所以小细节方面也要注意。

2024-03-10 21:24:29 313

原创 ZZU2024年迎新赛复盘----A题

ZZU2024年迎新赛复盘----A题

2024-03-10 21:12:13 186

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除