![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Acwing算法基础课
记录刷题历程
笨笨sg
东B计科
展开
-
Acwing_888(求组合数Ⅳ)
【代码】Acwing_888(求组合数Ⅳ)原创 2024-03-15 22:24:23 · 366 阅读 · 0 评论 -
Acwing_868(筛质数)
常见的筛选质数的方法包括:普通筛法O(nlogn)、诶氏筛法 O(nloglogn)、线性筛法|欧式筛 O(n)原创 2024-03-11 17:49:10 · 420 阅读 · 0 评论 -
Acwing_871(约数之和)
【代码】Acwing_871(约数之和)原创 2024-03-11 20:21:30 · 383 阅读 · 0 评论 -
Acwing_876(快速幂求逆元)
设 ax1+by1=gcd(a,b)=gcd(b,a%b)=bx2+(a%b)y2。当 b=0 时,gcd(a,b)=a,此时 x=1 , y=0。拆一个b出来可得 b * b ^ (n - 2) ≡ 1 (mod n)则 ax1+by1=bx2+(a-a/b*b)y2。a有逆元的充要条件是a与p互质,所以gcd(a, p) = 1。故当n为质数时,b的乘法逆元 x = b ^ (n - 2)已知b * x ≡ 1 (mod n),x是b的逆元。又因 a%b=a-a/b*b。拓展欧几里得算法可用于。原创 2024-03-14 13:21:56 · 395 阅读 · 0 评论 -
Acwing_886(求组合数Ⅱ)
【代码】Acwing_886(求组合数Ⅱ)原创 2024-03-15 22:08:47 · 367 阅读 · 0 评论 -
Acwing_872(最大公约数)
要么手写辗转相除要么直接用内置函数__gcd(int a,int b)原创 2024-03-11 20:33:35 · 304 阅读 · 0 评论 -
Acwing_883(高斯消元解线性方程组)
原题链接:883. 高斯消元解线性方程组 - AcWing题库题解:使用三种矩阵的初等行变换将原矩阵化为阶梯型矩阵AcWing 883. 高斯消元解线性方程组(细致的讲解与有动图的模拟) - AcWing代码:#include <bits/stdc++.h>using namespace std;const int N = 110;const double eps = 1e-6;int n;double a[N][N];int gauss(){ int原创 2024-03-15 16:26:57 · 392 阅读 · 0 评论 -
Acwing_877(拓展欧几里得算法)
扩展欧几里得算法的实质在于利用了递归和辗转相除的思想,在每一步计算中,它利用辗转相除的原理计算出当前两个数的余数,并且不断地更新这些余数直到找到最大公约数为止。同时,在这个过程中,它利用递归的方式向前推进,计算出适当的系数x和y,从而满足贝祖等式。这种方法在计算最大公约数的同时,还能够找到一对满足贝祖等式的整数解,为数论中的诸多问题提供了便利的解决途径,例如模逆元的计算、线性同余方程的求解等。其中gcd(a, b)表示a和b的最大公约数。原创 2024-03-14 21:04:47 · 388 阅读 · 0 评论 -
Acwing_885(求组合数I)
【代码】Acwing_885(求组合数I)原创 2024-03-15 21:56:20 · 361 阅读 · 0 评论 -
Acwing_874(筛法求欧拉函数)
【代码】Acwing_874(筛法求欧拉函数)原创 2024-03-13 20:45:17 · 377 阅读 · 0 评论 -
Acwing_869(试除法求约数)
【代码】Acwing_869(试除法求约数)原创 2024-03-11 17:58:59 · 347 阅读 · 0 评论 -
Acwing_875(快速幂)
将指数的二进制形式从右向左逐位遍历。每次遇到一个二进制位为 1 的位置,就累乘当前的底数。快速幂的基本思想是利用幂的指数分解,将指数逐步减半,减小计算量,从而提高计算效率。将幂的指数表示为二进制形式。在遍历过程中,每次将底数平方,即。每遍历一位二进制位,指数减半。原创 2024-03-13 21:22:25 · 366 阅读 · 0 评论 -
Acwing_870(约数个数)
【代码】Acwing_870(约数个数)原创 2024-03-11 19:51:42 · 367 阅读 · 0 评论 -
Acwing_890(能被整除的数)
【代码】Acwing_890(能被整除的数)原创 2024-03-16 10:54:31 · 376 阅读 · 0 评论 -
Acwing_878(线性同余方程)
因为题目指定了不能超过int,所以最后要mod m。原创 2024-03-14 21:43:18 · 384 阅读 · 0 评论 -
Acwing_873(欧拉函数)
【代码】Acwing_873(欧拉函数)原创 2024-03-13 20:07:52 · 320 阅读 · 0 评论 -
Acwing_884(高斯消元解异或线性方程组)
与求解线性方程组的+运算不同,求解异或线性方程组是xor运算,需要使用异或运算的性质来简化方程组,并最终找到变量的值。原创 2024-03-15 16:32:47 · 349 阅读 · 0 评论 -
Acwing_204(表达整数的奇怪方式)
【代码】Acwing_204(表达整数的奇怪方式)原创 2024-03-15 12:12:12 · 409 阅读 · 0 评论 -
Acwing_887(求组合数Ⅲ)
卢卡斯定理(Lucas' Theorem)是一种用于计算组合数(组合数也称为二项系数)的定理,它在。,从而在求解组合数时可以更高效地利用模运算。原创 2024-03-15 22:16:46 · 345 阅读 · 0 评论 -
Acwing_889(满足条件的01序列)
我们可以直观发现只要路径接触下图红线部分(包括红线)就是非法的,而从(0,0)到坐标(n,n)的路径则关于红线与其从(0,0)到坐标(n-1,n+1)的路径对称,而从(0,0)到坐标(n-1,n+1)的路径都是非法的(因为接触到了红线),那么从(0,0)到坐标(n,n)的非法路径数量=(0,0)到坐标(n-1,n+1)的路径总数量=本题所要求的是卡特兰数。在本题中,我们可以将长度为2n的01序列视为从(0,0)到坐标(n,n)的路径,0代表右移,1代表上移。求从(0,0)到坐标(n,n)的合法路径数量。原创 2024-03-15 23:01:57 · 369 阅读 · 0 评论 -
Acwing_866(试除法判定质数)
这个没什么好说的,但是注意尽量不要用i<=sqrt(x)以及i*i<=x的形式,因为相比于i<=x/i,后者的效率更好一些。原创 2024-03-11 17:11:58 · 319 阅读 · 0 评论 -
Acwing_851(spfa求最短路)
相比于Bellman_ford算法的O(mn)复杂度,SPFA算法在最好情况下的时间复杂度为O(m),最坏情况下的时间复杂度则为O(mn)原创 2024-03-08 17:56:25 · 400 阅读 · 0 评论 -
Acwing_859(Kruskal求最小生成树)
Kruskal算法通过按边权从小到大的顺序选择边,将图中的节点逐渐连接形成树,确保不形成环,直到所有节点都连接在一起。而对于稀疏图而言(m=n)的情况,则使用Kruskal算法更好,相比之下,堆优化版本的Prim反而没了用武之地。对于稠密图而言(m=n^2)的情况,使用朴素版Prim算法更好;原创 2024-03-09 10:42:50 · 387 阅读 · 0 评论 -
Acwing_860(染色法判定二分图)
一个图被称为二分图,如果它的所有顶点可以被划分为两个不相交的集合,使得图中的每条边都连接一个属于第一个集合的顶点和一个属于第二个集合的顶点。简单来说,二分图就是可以分为两个独立部分的图,每一条边都跨越这两个部分。染色法是判定图是否为二分图的一种常用方法。原创 2024-03-09 11:30:22 · 430 阅读 · 0 评论 -
Acwing_867(分解质因数)
根据算术基本定理,不考虑排列顺序的情况下,每个正整数都能够以唯一的方式表示成它的质因数的乘积。然后用for循环寻找即可。原创 2024-03-11 17:27:02 · 332 阅读 · 0 评论 -
Acwing_854(Floyd求最短路 )
对于求多源最短路径问题,直接用Floyd算法三个循环暴力求解即可。原创 2024-03-08 23:35:05 · 371 阅读 · 0 评论 -
Acwing_852(spfa判断负环)
ballman_ford以及spfa都可以用于判断负环。相比之下,还是spfa效果更好一些。原创 2024-03-08 22:45:33 · 339 阅读 · 0 评论 -
Acwing_853(有边数限制的最短路)
bellman_ford算法通俗地来讲就是:假设 1 号点到 n 号点是可达的,每一个点同时向指向的方向出发,更新相邻的点的最短距离,通过循环 n-1 次操作,若图中不存在负环,则 1 号点一定会到达 n 号点,若图中存在负环,则在 n-1 次松弛后一定还会更新。dijkstra不能解决负权边是因为 dijkstra要求每个点被确定后st[j] = true,dist[j]就是最短距离了,之后就不能再被更新了(一锤子买卖),而如果有负权边的话,那已经确定的点的dist[j]不一定是最短了。原创 2024-03-08 16:09:05 · 381 阅读 · 0 评论 -
Acwing_861(二分图的最大匹配数)
是用于解决二分图最大匹配问题的一种算法。在一个二分图中,匹配是指图中的边的集合,其中任意两条边没有共同的端点。而最大匹配是图中所有匹配中边数最大的匹配。原创 2024-03-09 14:11:55 · 343 阅读 · 0 评论 -
Acwing_850(Dijkstra求最短路 II)
因此可以采用堆优化的Dijkstra算法,需要注意的是采用vector开辟邻接矩阵会Segmentation Fault,因此可以通过手搓单链表建立邻接矩阵。原创 2024-03-07 21:01:27 · 383 阅读 · 0 评论 -
Acwing_858(Prim求最小生成树)
而对于稀疏图而言(m=n)的情况,则使用Kruskal算法更好,相比之下,堆优化版本的Prim反而没了用武之地。Dijkstra是更新到起始点的距离,而Prim是更新到集合S的距离。对于稠密图而言(m=n^2)的情况,使用朴素版Prim算法更好;原创 2024-03-09 09:59:00 · 404 阅读 · 0 评论 -
Acwing_843(n皇后)
而方法二如果在某个位置放置皇后后导致s(皇后个数)最终不能为n,即使否定这个位置还原为.后,由于y不能实现自增,所以dfs会在没找到结果情况下直接结束,不会进行下一轮迭代。因此,我们就要考虑到不放皇后的情况,这样子不会把“路”堵死,会让dfs(x,y+1,s)进行下一轮迭代,考虑多种情况。在每一行的循环中,对每一个位置 i 进行判断,如果该位置可以放皇后(不受攻击),就放置皇后,然后递归到下一行。达到了 n+1,说明已经成功放置了 n 个皇后,且已经处理完所有行,此时检查已经放置的皇后数量。原创 2024-03-05 15:44:36 · 835 阅读 · 0 评论 -
Acwing_849(Dijkstra求最短路 I)
算法的主要耗时的步骤是从dist 数组中选出:没有确定最短路径的节点中距离源点最近的点 t。只是找个最小值而已,没有必要每次遍历一遍dist数组。在一组数中每次能很快的找到最小值,很容易想到使用小根堆。可以使用库中的小根堆(推荐)或者自己编写。可以参看这篇博客的讲解,图文结合,效果很好。原创 2024-03-06 23:57:54 · 391 阅读 · 0 评论 -
Acwing_848(有向图的拓扑序列)
只有有向无环图才有拓扑序列,因此可以用于(环检测)求拓扑序列是一层层来的,因此适合采用dfs。原创 2024-03-06 15:52:50 · 389 阅读 · 0 评论 -
Acwing_240(食物链)
【代码】Acwing_240(食物链)原创 2024-03-02 17:00:12 · 324 阅读 · 0 评论 -
Acwing_143(最大异或对)
字典树不单单可以高效存储和查找字符串集合,还可以存储二进制数字。将每个数以二进制方式存入字典树,找的时候从。原创 2024-03-02 13:19:15 · 396 阅读 · 0 评论 -
Acwing_841(字符串哈希)
内完成子串的哈希值的计算,提高了字符串匹配的效率。在比较字符串是否相等时,不需要逐个字符比较,而是通过比较哈希值,从而提高了比较的速度。需要注意的是,哈希值的冲突问题需要谨慎处理,不同的字符串尽量对应不同的哈希值,可以采用经验值来选择哈希函数的参数。字符串哈希的思想就是通过将字符串映射成一个进制数,以体现字符和字符顺序的关系。原创 2024-03-03 21:05:31 · 360 阅读 · 0 评论 -
Acwing_844(走迷宫)
本题因为是走迷宫(从起点到终点的最短路径),且无边权,因此更适合用bfs逐层求解。原创 2024-03-05 19:45:29 · 420 阅读 · 0 评论 -
Acwing_836(合并集合)
【代码】Acwing_836(合并集合)原创 2024-03-02 16:41:13 · 355 阅读 · 0 评论 -
Acwing_839(模拟堆)
由于需要考虑插入顺序,所以本题比较恶心。原创 2024-03-02 22:12:06 · 365 阅读 · 0 评论