蓝桥杯学习心得

第一讲 递推与递归

递推

  • 基础题目

    • AcWing 717. 简单斐波那契
  • 典型题型

    • AcWing 95. 费解的开关
    • AcWing 1208. 翻硬币
      分析
      (1) 费解的开关首先假设第一行不按,由此发现后面行的操作是固定的,模拟即可,然后应用二进制枚举去看第一行的按法.
      (2) 翻硬币可以看作是一维的费解的开关,发现如果第一枚硬币固定,后面按法是固定的,因此可以二进制枚举第一枚硬币的按法,而第一枚硬币的按法,显然有两种.
  • 其他题目

    • AcWing 116. 飞行员兄弟
      这个题只有一个4 * 4 的图,16个点,可以直接216 二进制枚举,y总的写法更好一些,我的暴力写法大概在卡在1s上.

递归

  • 基础题型

    • AcWing 94. 递归实现排列型枚举
      最基础的题型,dfs一个排列数并输出

    • AcWing 92. 递归实现指数型枚举
      稍微进阶一点(我看来),与通常的递归相比,递归出口不再是==,而是每一层都要递归出去,此时要注意那个return;不能乱写了.

    • AcWing 93. 递归实现组合型枚举
      枚举一个组合数的重点在于不能重复,即要对搜索进行优化,采取的办法是强行规定一种答案的格式,如我用的是要求序列严格递增,这样不会重复枚举.
      带给我启发的题目是ABC 236 D - Dance
      题解链接:https://www.cnblogs.com/bxhbxh/p/15941631.html

    • AcWing 1209. 带分数
      这个题是一个好题,有以下几点需要注意:
      (1)首先是对枚举方案的优化,普通的解法可能要对9个数的排列做一个全面的dfs,但是本题通过对式子的变形,变成了对a、c的枚举,然后判断b是否符合要求.大大地优化.
      (2)本题很好地考了递归出口的问题,因为dfsa的递归出口是另一个递归的入口,第一次见递归套递归,很好.
      (3)对于递归到的结果的记录不一定是一个1* 9 的数组,本题就直接记录a的值.
      (4)对于方案是否合法的判断要认真写,不要忘记 b > 0, 不要忘记判断的时候不要改动递归用的st数组,可以再copy一份.




第二讲 二分与前缀和

二分

  • 基础题目

    • AcWing 789. 数的范围
    • AcWing 790. 数的三次方根
      两个模板题,分别是整数二分和浮点数二分。
      整数二分的边界条件比较复杂一些,重点还是在于想明白往左查还是往右查,另外l和r的设定,emmm目前找不到例题了,如果是搜数组的话,要写的很准确,如果不是搜数组的话,范围可以比答案大;
      浮点数二分重点在于while条件,看清题目要求,1e-8是正常的.
  • 其他题目

    • AcWing 730. 机器人跳跃问题
      这个问题可能一开始对题意理解有偏差,写着写着才发现是二分,这个二分很好写,错的原因在于竟然有一个地方要开double才存的下.发现yxc是这么写的,有点聪明,因为题目给的最大高度是1e5,所以当e大于1e5会只增不减,可以提前返回.
      【大毛病,不喜欢认真算数据范围和复杂度】
      image

    • AcWing 1221. 四平方和
      感觉很妙,空间换时间,感觉有很多时候我很傻:
      (1)很多时候暴力去枚举,有几维就像枚举几维,但很多时候n维至多枚举n-1维,甚至像这个题一样枚举两维再搜.
      (2)这个题的字典序也是有技巧性的,实现方法是预处理c、d的平方,然后按字典序去枚举a、b,感觉我第一次用纯哈希写的不是很符合字典序,或者会占用很多空间.
      (3)这个题很妙的一点在于哈希的复杂度更低确会超时,但是二分复杂度高确不会超时,充分说明了stl的慢.

    • AcWing 1227. 分巧克力
      是一个比较简单的二分,但是我的bug在于没有实际去自己认真想想最多可以切出多少个正方形,类似的想起了cf一场的B题,dyh的做法是任何一个四方块中不会有3个黑,还是要抽象思考.本题的计算方法如下:
      image

前缀和

  • 基础题目

    • AcWing 795. 前缀和
    • AcWing 796. 子矩阵的和
      模板题,要掌握板子.
  • 其他题目

    • AcWing 99. 激光炸弹
      二维前缀和模板题
    • AcWing 1230. K倍区间
      很妙,本质是个计数题,重点注意思路。从k的倍数转化到mod k同余再到答案的记录,以及最后ans[0](区间长度为1的情况)的加入,很妙,值得学习.

第六讲 双指针、bfs与图论

双指针

双指针算法的复杂度为O(n),有两点需要注意,一个是双指针算法的模板,另一个是注意双指针的思路来源很重要的一点是问题求解的单调性,因为是单调的,所以指针会一直沿一个方向移动,而不会退回来。

	for(int i = 0, j = 0; i < n; i ++){
		while(j < i && check(j)) j ++;
		//题目的具体逻辑
	}
  • 题目清单

    • AcWing 799. 最长连续不重复子序列
      本题很重要的一点在于s[a[i]]数组的记录,这种写法很常见;另外可以注意一下两个指针的相对位置关系,j在i的左边,这种情况下边界处理较为简单;此外,可以分析一下两个指针的单调性。

    • AcWing 800. 数组元素的目标和
      很好地体现了双指针问题的单调性

    • AcWing 2816. 判断子序列
      该问题需要注意的有两点,一个是边界,另一个是state数组,注意不要想错或者想简单了

    • AcWing 1240. 完全二叉树的权值
      套着树的壳子的双指针题,题目的分析很简单,不过我好像写成了前缀和...

    • AcWing 1238. 日志统计
      (1)关于该题的题意,注意该题可能有很多个id在同一时间收到点赞,所以该题要存一个pair数组再sort.
      (2)本题同样用到了s[a[i]]数组,很妙
      (3)本题用到了同款双指针思路
      https://ac.nowcoder.com/acm/contest/29439/H

bfs与图论

  • bfs

    • AcWing 1101. 献给阿尔吉侬的花束
      bfs模板题

    • AcWing 1096. 地牢大师
      三维的bfs,本质相同

  • Floodfill

    • AcWing 1097. 池塘计数
      floodfill模板题

    • AcWing 1113. 红与黑
      floodfill模板题

    • AcWing 1233. 全球变暖
      Floodfill算法 + 计数,记录是不是处于交界处还是挺巧妙的,就是看当前点走一步扩展出去会不会有“水”(本题题意)

  • 单链表

    • AcWing 826. 单链表
      本题的经典之处在于询问的读入用cin...
      【待学习】【待学习】【待学习】【待学习】【待学习】【待学习】【待学习】【待学习】【待学习】【待学习】【待学习】【待学习】
  • 图论

    • AcWing 1224. 交换瓶子
      这个题的知识好像是叫置换群,需要注意的有以下几点:
      (1)建图方式:由当前点指向当前点应当在的位置上的点
      (2)这样题目中会形成若干个环
      (3)有性质如下:如果交换的两个点位于一个环上,该环会变成两个环;如果交换的两个点位于两个环上,这两个环会合成一个环;
      (4)问题的目标是形成n个环,可统计出实际有k个环,因此最少需要n - k次交换

第三讲 数学与简单dp

数学题(结论题居多)

  • 题目清单
    • AcWing 1205. 买不到的数目
      问两个整数a、b所不能表示的最大整数。首先如果gcd(a, b) = d > 1, 那么这个最大整数不存在,因为一个数只要不是d的倍数,就凑不出来;如果gcd(a, b) = 1, 则结论为a * b - a - b.

    • AcWing 1211. 蚂蚁感冒
      该题的重要想法是普通蚂蚁与患病蚂蚁相遇之后,可以视作穿过而非掉头。所以该题应当统计在初始患病蚂蚁左边朝右走的和初始患病蚂蚁右边朝左走的,这些都会感染,可以自行模拟行走过程,需要特判初始患病蚂蚁往左走但左边无向右走和初始患病蚂蚁向右走但右边无向左走蚂蚁的情况,答案为1.

    • AcWing 1216. 饮料换购
      还是一个很经典的数学题,相当于当n3 的时候,两个瓶盖换一瓶饮料.两种写法运行时间不同.

简单dp

  • 题目清单
    • AcWing 2. 01背包问题
      比较简单的状态表示与状态转移,注意如果用滚动数组优化的话j这一维要倒着遍历,避免更新错误.

    • AcWing 1015. 摘花生
      在二维矩阵上的一个简单dp,状态转移方程是根据行走方向确定的.

    • AcWing 895. 最长上升子序列
      状态表示:典型+妙 f(i)表示以a[i]结尾的上升子序列的最大长度,但这样表示确实又好表示又好转移.

    • AcWing 1212. 地宫取宝
      优质题解:https://www.acwing.com/solution/content/7116/
      进行状态表示的时候主要考虑限制条件,比如该题,位置限制(x、y),数量限制(cnt),价值限制(拿起的物品要比当前物品的价值大),所以状态表示是4维的.

    • AcWing 1214. 波动数列
      太妙了,建议看题解https://www.acwing.com/solution/content/9223/

枚举、模拟与排序

  • 暴力题

    • AcWing 1210. 连号区间数
      重点在于对连号的理解,连号等价于该段区间的mmax - mmin = r - l,然后外层暴力双层循环就可以了.

    • AcWing 1236. 递增三元组
      emmmm就是个暴力,暴力方法是二分查找+前缀和,有一些细节要注意.

    • AcWing 1245. 特别数的和
      暴力枚举,核心在于to_string()函数.

    • AcWing 1204. 错误票据
      这个题的读入是真的难,待整理

    • AcWing 466. 回文日期
      我只能说这个题很麻烦

    • AcWing 1229. 日期问题
      这个题和上个题同样麻烦,学会了vector去重和排序

    • AcWing 1219. 移动距离
      超easy的~

    • AcWing 1231. 航班时间
      很麻烦但是很easy

    • AcWing 1241. 外卖店优先级
      模拟题,注意一下边界

  • 归并排序

    • AcWing 787. 归并排序
    • AcWing 788. 逆序对的数量
posted @   小菜珠的成长之路  阅读(99)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示