acwing算法的学习
文章平均质量分 50
镜子的分享
学习永无止境
展开
-
bfs 板子题 走迷宫
宽搜即向周围的一圈 扩散 去搜索一圈 此处 的思想就是 应用一个队列 将每一个满足条件的点 存储进去 然后用的时候将每一个点 读取 然后根据 题意应用条件 判断周围的点是否满足条件 观察是否将其继续存入 队列中此题走迷宫很好地应用了此思想 先将第一个点入队 然后根据题意判断周围的点是否满足此点周围的点是否满足题意周围的点怎么走 设定一个上下左右的坐标 看此点走过去 后是否满足条件 满足,则将此点也入队 代码:#原创 2021-07-21 11:01:52 · 194 阅读 · 0 评论 -
扩展欧几里得算法 C++ ( 原来还可以这样做 tql )
扩展欧几里得算法请先熟练理解欧几里得算法定义 以及下面的欧几里得算法代码板子任何代码,思想最重要!思想:先回忆欧几里得算法辗转相除法求最大公约数具体的辗转相除法定义,请百度…//enen 真的简洁 真的妙不可言int gcd(int a, int b){ return b ? gcd(b, a % b) : a;}扩展欧几里得算法思想:gcd(a,b) 在下面中均 指a,b 的最大公约数首先 要明白的是 对于任意正整数 a,b 一定存在一对非0 整数 x ,y使得 ax原创 2021-06-18 20:58:28 · 1103 阅读 · 2 评论 -
快速排序C++
快速排序快排:主要是 分治的思想:1、确定分界点, 分界点是随机的 q[l] q[r] q[(l+r)/2]都可以 这三种是常用的 当然也可以 随便搞一个 这个值可是每一个区间的随机值 别死记注意分界点上的数不一定是x x可能在很奇快的位置2、把整个区间根据整个分界点划分为二 这个划分为二 是根据所求的是从小到大还是从大到小 如 这里的所有<=分界点的在左边 所有>=分界点的在右边这个数和x相等的话 在左边和右边其实都是可以的3、递归处理左右两边 当无限个左右两边都排原创 2021-06-13 16:24:07 · 115 阅读 · 0 评论 -
归并排排序C++(递归 好家伙)
归并排序代码跟着思想走!归并排序的思想 :1、首先 确定分界点 数组的中点 mid=l+r>>12、其次 将数组递归分开 递归排序 左右3、最后 进行归并 合二为一具体的代码如下:#include<iostream>using namespace std;const int N = 1e5 + 10;int a[N];int tmp[N];int n;void merge_sort(int l, int r){ if (l >= r)retu原创 2021-06-13 15:23:44 · 264 阅读 · 1 评论 -
快速乘C++(菜鸡不想溢出)
快速乘这里的快速乘的思想和快速幂的差不多;首先要了解取余公式:(a + b)%p = (a%p + b%p)%p例题:三个数 a,b,p;数据范围:1 ≤ a,b,p ≤ 2 × 10 ^ 9求a*b%p如何快速求得,且数据不溢出呢?答案很简单,和快速幂的思想一样把 b 给二进制了就ok了。把 b 换算成多个 2 ^ i 相加。同样的道理这里是先对多个 a * (2 ^ i)%p 进行预处理整体依照这个公式巧妙构建代码:(a + b)%p = (a%p + b%p)%p代码里的原创 2021-06-08 18:20:04 · 684 阅读 · 0 评论 -
快速幂思想C++ (菜鸡不想超时了)
快速幂的理解此模板题来自acwing网站,不得不说y总的思想实在是太妙了。以下是个人的理解心得:首先要想做的快速幂因该先了解以下几个知识点:取模运算、同余式。取模运算先了解以下两个公式:(a * b) % p = (a % p * b % p) % pa ^ b % p = ((a % p)^b) % p同余式基本概念: 一个整数a被m除时,得到商 和唯一的一个余数r,另一个整数b也被m除时,得到商 ,得到的唯一余数r也是,即(其中 0 < = r < m ) ,原创 2021-06-08 09:04:43 · 219 阅读 · 0 评论 -
二分查找C++
二分查找二分查找主要的问题就是边界问题,边界用错就会出现死循环的问题。这里本人为了避免出现呢死循环的问题用了一个快排的一个小方法解决了此问题。老规矩先看代码;代码1:int bsearch_1(int l, int r){ while (l < r) { int mid = l + r >> 1; if (check(mid))r = mid; else l = mid + 1; } return l;}代码2:int bsearch_2(int l原创 2021-06-04 09:23:40 · 133 阅读 · 0 评论 -
求区间和(离散化思想,前缀和思想,二分查找的思想)
离散化的应用这里的离散化的应用特指整数的离散化、有序的离散化、饱序的离散化。如:一个很大的数组但是只用到其中的一小部分元素,此时就可以用离散化来解决此问题。这里来看一道acwing上的一道模板题:假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。现在,我们首先进行 n 次操作,每次操作将某一位置 x 上的数加 c。接下来,进行 m 次询问,每个询问包含两个整数 l 和 r,你需要求出在区间 [l,r] 之间的所有数的和。输入格式:第一行包含两个整数 n 和 m。接下来 n 行,每行包含两原创 2021-06-04 08:12:30 · 355 阅读 · 0 评论 -
树的重心-acwing的学习
数和图的存储方式:树是一种特殊的图 ,是无环连通图。有向图的存储:邻接矩阵 g[a,b] a和b的关系 权重 bool值邻接表 有n个点 就开了n个单链表 每一个节点上开了一个单链表每个单链表上存储的值是什么?存储这个点可以走到哪个点。单链表里面的顺序是无关紧要的,只要能表示此点可以到哪个点就可以。 二维数组,记录 ab ba,如果是无权重, 就是bool或者01表示。如果有权值就记录权值。树图的遍历有两种方式:深度优先遍历 一般的题目都是只遍历一次宽度优先遍历 一般的原创 2021-05-08 00:10:51 · 137 阅读 · 0 评论