蓝桥做题知识点
蓝桥
你说的白是什么白_
大四学生一枚,2023年本科毕业,现已工作
展开
-
20.1 最大公约数GCD和最小公倍数 LCM
文章目录最大公约数GCD【Greatest Common Divisor】1. GCD 的定义2. GCD 的性质3. GCD 的代码【辗转相除法】4. STL的最大公约数 : __gcd最小公倍数LCM【the Least Common Multiple】最大公约数GCD【Greatest Common Divisor】1. GCD 的定义整数a和b的最大公约数是指:能同时整除a和b的最大整数,记为gcd(a,b)。例如:gcd(15,81)= 3gcd(0,44)=44gcd(0,0)=原创 2022-04-04 16:30:59 · 273 阅读 · 0 评论 -
19.2 矩阵相乘 +方阵的快速幂
矩阵相乘矩阵快速幂原创 2022-04-04 15:40:00 · 409 阅读 · 0 评论 -
19.1 快速幂的定义和模板
文章目录模运算的加减乘除快速幂的定义快速幂的例题模运算的加减乘除模运算是大数运算中的常用操作。如果一个数太大,无法直接输出,或者不需要直接输出,可以把它取模后,缩小数值再输出。取模也是哈希的常用技术。有如下运算:快速幂的定义int fastPow(int a, int n){ //计算a^n int ans = 1; //用ans返回结果 while(n) { //把n看成二进制,逐个处理它的最后一位原创 2022-04-03 22:13:21 · 533 阅读 · 0 评论 -
18.1 位运算:判断a的第i位是否等于1 、把a的第i位改成1(或0) 、把a的最后一个1去掉
状态压缩 DP 用二进制来表示状态,而二进制数的处理需要用到各种位运算。C 语言的位运算有 “&”,“|”,“^”,“<<”,">>"等,下面是例子。#include<bits/stdc++.h>int main(){ int a = 213, b = 21; //a = 1101 0101 , b= 0001 1001 printf("a & b = %d\n",a & b); // AND =原创 2022-04-03 21:05:47 · 653 阅读 · 0 评论 -
16.2 DP的两个特征 + 经典问题【小明的背包1】
动态规划的引入:参考我的博客:动态规划引入例子:最少硬币问题DP 的两个特征1. 重叠子问题首先,子问题是原大问题的小版本,计算步骤完全一样;其次,计算大问题的时候,需要多次重复计算小问题。这就是“重叠子问题”。一个子问题的多次计算,耗费了大量时间。用DP处理重叠子问题,每个子问题只需要计算一次,从而避免了重复计算,这就是DP效率高的原因。具体的做法是:首先分析得到最优子结构,然后用递推或者带记忆化搜索的递归进行编程,从而实现了高效的计算。2. 最优子结构最优子结构的意思是:首先,大问题原创 2022-03-14 22:16:34 · 660 阅读 · 0 评论 -
16.1 动态规划引入例子:最少硬币问题
#include<bits/stdc++.h>using namespace std;const int M = 251; //定义最大金额const int N = 5; //5种硬币int type[N] = {1, 5, 10, 25, 50}; //5种面值int cnt[M]; //每个金额对应最少的硬币数量const int INF = 0.原创 2022-03-14 21:44:46 · 1263 阅读 · 1 评论 -
15. 计算几何:圆的表示&& 点、直线、线段与圆的关系
文章目录圆的表示点、直线、线段与圆的关系1. 点和圆的关系2. 直线和圆的关系3. 线段和圆的关系4. 直线和圆的交点圆的表示struct Circle{ Point c; //圆心 double r; //半径 Circle(){} Circle(Point _c,double _r):c(_c),r(_r){} Circle(double x,double y,double _r){c=Point(x,y);r = _r;}};点、直线、线段与圆原创 2022-03-13 20:37:26 · 1369 阅读 · 0 评论 -
15.计算几何:点、直线、线段的位置关系及其它关系
文章目录直线的表示直线的表示直线有多种表示方法。编程时,可以灵活使用这些方法:原创 2022-03-13 12:03:57 · 2801 阅读 · 0 评论 -
15.计算几何:点积(Dot product)与叉积(Cross product)
向量的内容只是前置知识,现在要讲的点积与叉积才是重点!向量的基本运算是点积和叉积。计算几何的各种操作,几乎都基于这两种运算文章目录1.点积(Dot product)1.1点积的定义【dot()函数】1.2 点积的应用2.叉积(Cross product)2.1 叉积的定义2.2 叉积的应用①判断向量 A、B 的方向关系②计算两向量构成的平行四边形有向面积③计算三点构成的三角形的面积④向量旋转⑤求单位法向量⑥用叉积检查两个向量是否平行或重合1.点积(Dot product)1.1点积的定义【dot()原创 2022-03-13 09:45:06 · 4004 阅读 · 1 评论 -
15.计算几何: 坐标值的精度【eps、sgn()、dcmp()】+ 平面上的点用struct表示 + 向量的定义与加减乘除
坐标值的精度(判断浮点数是否等于 0、是否相等)平面上的点怎么表示向量的定义与加减乘除原创 2022-03-13 09:19:48 · 786 阅读 · 0 评论 -
13. 数状数组
数状数组的理解参考视频:树状数组到底是何方神圣,我们一起揭开他的面纱!蓝桥的理解(记模板就行了,这之后就可以不看)#define lowbit(x) ((x) & - (x)) int tree[N];void update(int x, int d) { //修改元素a[x], a= a[x] + d while(x <= N) { tree[x] += d; x += lowbit(x); }}int su原创 2022-03-01 22:51:29 · 241 阅读 · 0 评论 -
12. 并查集的理解(初始化,查询,合并)
不理解就再看一遍参考视频:《算法训练营进阶篇》01 并查集原创 2022-02-28 21:16:15 · 345 阅读 · 0 评论 -
9. BFS 和 DFS 的原理
原创 2022-02-23 20:27:37 · 178 阅读 · 0 评论 -
9. 用dfs思想【自写全排列算法】
不是所有需要排列的场景都能直接用next_permutation(),有时候还是得自己写排列。如果用next_permutation()函数会超时,所以必须得自己写排列算法。下面来分析一下两种自写代码的思路吧!自写全排列算法我们设数字是 {1 2 3 4 5…n},那么递归求全排列的思路是:参考代码#include<bits/stdc++.h>using namespace std;int a[20]={1,2,3,4,5,6,7,8,9,10,11,12,13};void原创 2022-02-23 20:24:03 · 352 阅读 · 1 评论 -
9.递推、递归 && 优化:记忆法递归 的介绍
以斐波那契数列的计算为例它的递推关系式是:f(n)= f(n-1)+ f(n-2)递推代码#include<bits/stdc++.h>using namespace std;int fib[25];int main(){ fib[1]=fib[2]=1; for(int i=3;i<=20;i++) fib[i]= fib[i-1]+fib[i-2]; cout <<fib[20];}递归代码#include<原创 2022-02-23 20:09:11 · 311 阅读 · 0 评论 -
8. 分治法的使用条件
平衡子问题:子问题的规模大致相同。能把问题划分成大小差不多相等的k个子问题,一般是k=2,即分成两个规模相等的子问题。编码的时候,每次分成两部分,然后继续分成两部分…该步骤和二分法很像。当然,二分法也是分治法,只是二分法的应用场合非常简单。独立子问题:子问题之间相互独立。这是区别于动态规划算法的根本特征,在动态规划算法中,子问题是相互联系的,而不是相互独立的。...原创 2022-02-22 21:56:25 · 1071 阅读 · 0 评论 -
8. 贪心【满足最优子结构,就能用】
文章目录贪心的概念最少硬币问题贪心的概念贪心(Greedy)可以说是最容易理解的算法思想:把整个问题分解成多个步骤,在每个步骤,都选取当前步骤的最优方案,直到所有步骤结束;在每一步,都不考虑对后续步骤的影响,在后续步骤中也不再回头改变前面的选择。简单地说,其思想就是“走一步看一步”、“目光短浅”。贪心法有广泛的应用例如图论中的最小生成树算法、单源最短路径算法Dijkstra,是贪心思想的典型应用。下面我们先用硬币问题的例子,引导出贪心法的应用规则吧。最少硬币问题#include&原创 2022-02-21 15:33:53 · 453 阅读 · 0 评论 -
7. 倍增、ST、RMQ的理解
文章目录倍增用ST表法——求RMQ问题0.首先要明白ST表是啥?0. ST表的递推公式1.即初始化ST表2. ST表的查询ST表的时间复杂度参考视频:https://www.bilibili.com/video/BV1gq4y1C7Ls倍增任意整数均可被表示成若干个2的次幕项之和。例如整数5,其二进制表示为101,该二进制数从右向左第0、2位均为1,则5=22+20。整数26,其二进制表示为11010,该二进制数从右向左第1、3、4位均为1,则26=24+23+21。也就是说,2的次幕项可被原创 2022-02-18 14:40:42 · 484 阅读 · 0 评论 -
6. 整数和实数二分法的模板
文章目录整数二分1. 单调递增序列中找 x 或者 x 的后继2. 在单调递增序列中查找 x 或者 x 的前驱实数二分整数二分1. 单调递增序列中找 x 或者 x 的后继模板一:a[0]~a[n-1]是单调递增的int bin_search(int *a, int n, int x){ int left = 0, right = n; //注意:不是 n-1,此时是左闭右开的[0,n) while (left < right)原创 2022-02-21 10:27:03 · 172 阅读 · 0 评论 -
5. 尺取法的概念
原创 2022-02-21 10:11:06 · 141 阅读 · 0 评论 -
3. C++ 全排列函数: next_permutation()
文章目录什么是排列prev_permutation()C++ 和 Python 都提供了排列函数,而 Java 没有提供。 C++ 的 next_permutation() 是全排列函数,只能输出序列中所有元素的全排列。什么是排列大佬:C++的STL提供求「下一个」排列组合的函数next_permutation()。例如三个字符(a,b,c)组成的序列,那么next_permutation()能按字典序返回6个组合,分别为abc,acb,bac,bca,cab,cba。函数next_permu原创 2022-02-21 09:26:29 · 621 阅读 · 0 评论 -
3. C++的sort()函数
文章目录对于 STL 的排序函数 sort(),我们从三个方面切入:定义:void sort (RandomAccessIterator first, RandomAccessIterator last);void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);返回值:无复杂度:...原创 2022-02-21 08:28:35 · 291 阅读 · 0 评论
分享