acwing 算法基础课知识点解析/模版题
文章平均质量分 65
小小 acmer 成长之路
小新-杂货铺
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
AcWing--877. 扩展欧几里得算法
给定 n 对正整数 ai,bi,对于每对数,求出一组 xi,yi,使其满足 ai×xi+bi×yi=gcd(ai,bi)。输出共 n 行,对于每组 ai,bi,求出一组满足条件的 xi,yi,每组结果占一行。本题答案不唯一,输出任意满足条件的 xi,yi 均可。接下来 n 行,每行包含两个整数 ai,bi。第一行包含整数 n。原创 2025-07-23 14:16:48 · 436 阅读 · 0 评论 -
AcWing--874.筛法求欧拉函数
共一行,包含一个整数,表示 1∼n 中每个数的欧拉函数之和。给定一个正整数 n,求 1∼n 中每个数的欧拉函数之和。共一行,包含一个整数 n。原创 2025-07-07 16:10:36 · 359 阅读 · 0 评论 -
AcWing--873.欧拉函数
1∼N 中与 N 互质的数的个数被称为欧拉函数,记为 ϕ(N)。若在算数基本定理中,N=pa1*pa2…*pam,则:原创 2025-07-06 20:42:03 · 306 阅读 · 0 评论 -
AcWing--876.快速幂求逆元(费马小定理)
若整数 b,m 互质,并且对于任意的整数 a,如果满足 b|a,则存在一个整数 x,使得 a/b≡a*x(mod m),则称 x 为 b 的模 m 乘法逆元,记为 b^(-1)(mod m)。b 存在乘法逆元的充要条件是 b 与模数 m 互质。当模数 m 为质数时,b^(m-2) 即为 b 的乘法逆元。原创 2025-03-27 17:43:35 · 363 阅读 · 0 评论 -
AcWing--875.快速幂(反复平方法)
二进制1011 = 2^3*1 + 2^2*0 + 2^1*1 + 2^0*1,所以a^11=a^(2^3*1 + 2^2*0 + 2^1*1 + 2^0*1)所以就只用分别求出[a^(2^3*1)]%p、[a^(2^1*1)]%p、[a^(2^0*1)]%p,再相乘,最后%p即可。所以(a^11)%p = (a^(2^3*1) * a^(2^1*1) * a^(2^0*1))%p。给定 n 组 ai,bi,pi,对于每组数据,求出 (ai^bi)mod pi 的值。二、反复平方法(二进制)原创 2025-03-19 21:21:10 · 403 阅读 · 0 评论 -
AcWing--872.最大公约数(欧几里得算法/辗转相除法)
给定 n 对正整数 ai,bi,请你求出每对数的最大公约数。接下来 n 行,每行包含一个整数对 ai,bi。输出共 n 行,每行输出一个整数对的最大公约数。第一行包含整数 n。原创 2025-03-19 20:03:29 · 347 阅读 · 0 评论 -
AcWing--871.约数之和
给定 n 个正整数 ai,请你输出这些数的乘积的约数之和,答案对 10^9+7 取模。输出一个整数,表示所给正整数的乘积的约数之和,答案需对 10^9+7 取模。接下来 n 行,每行包含一个整数 ai。第一行包含整数 n。原创 2025-03-15 16:54:32 · 391 阅读 · 0 评论 -
AcWing--870.约数个数
即 N 的任意一个约数都可以用②这种形式表示,而每一个bi的取值范围都在 0~ai 之间,并且N的任意两个约数之间,只要有一个 bi 不相同,那么这两个约数就不相同(算法基本定理)N 的任意一个约数 a=p1^b1·p2^b2···pk^bk(其中 0<=bi<=ai)......②。给定 n 个正整数 ai,请你输出这些数的乘积的约数个数,答案对 10^9+7 取模。输出一个整数,表示所给正整数的乘积的约数个数,答案需对 10^9+7取模。自己拆开来看看,就会发现其实就是每个约数的排列组合的和。原创 2025-03-15 16:49:07 · 472 阅读 · 0 评论 -
AcWing--869.试除法求约数
硬写一定会超时,就是因为在求约数的时候重复了,例如a=120,2为他的一个约数,对应的60为他的另一个更大的约数,此时找到了2,也就相当于找到了60,这样节约一般的时间(只用遍历更小的那一半约数)。给定 n 个正整数 ai,对于每个整数 ai,请你按照从小到大的顺序输出它的所有约数。输出共 n 行,其中第 i 行输出第 i 个整数 ai 的所有约数。接下来 n 行,每行包含一个整数 ai。第一行包含整数 n。原创 2025-03-11 20:40:10 · 255 阅读 · 0 评论 -
AcWing--868.筛质数(埃氏筛、欧拉筛)
如果i是质数,则在枚举到primes[j]=i的时候也会break退出循环,此时j=cnt,总之,j一定不会大于cnt。因为如果i是合数,则在枚举到i的质因数primes[j]时就会退出循环,此时的j一定小于cnt。综上,不论是那种情况,合数st[primes[j] * i]都是被它的最小质因子primes[j]筛掉的。j一定会在>=cnt之前退出循环,所以for循环不用加j<=cnt循环结束条件。n只会被最小质因子筛掉,即一个合数只会被筛一次,时间复杂度O(n)原创 2025-03-09 15:35:19 · 451 阅读 · 0 评论 -
AcWing--867.分解质因数
对于每个正整数 ai,按照从小到大的顺序输出其分解质因数后,每个质因数的底数和指数,每个底数和指数占一行。给定 n 个正整数 ai,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。每个正整数的质因数全部输出完毕后,输出一个空行。接下来 n 行,每行包含一个正整数 ai。第一行包含整数 n。原创 2025-03-01 21:31:30 · 418 阅读 · 0 评论 -
AcWing--866.试除法判定质数
若循环结束条件写成:i*i<=a ,则当 a 太大接近于int的最大值时,计算i*i可能会溢出,结果就变成负数了,循环条件恒成立,死循环。若循环结束条件写成:i<=sqrt(a),则每次循环都会调用一遍sqrt()函数,它计算比较慢,所以不推荐。共 n 行,其中第 i 行输出第 i 个正整数 ai 是否为质数,是则输出。给定 n 个正整数 ai,判定每个数是否是质数。接下来 n 行,每行包含一个正整数 ai。for循环的结束条件建议采用代码中的。第一行包含整数 n。原创 2025-03-01 20:23:51 · 200 阅读 · 0 评论 -
AcWing--831.KMP字符串
解释:for 循环 m 次,其中 j++ 最多会执行 m 次,而 while 循环每次执行时,j 都会减小(因为定义限定了 ne[ j ] < j ),j最多会减 m 次。两个字符串一位一位比较,若对应位置一样,则继续比较,P字符串的所有字符比较完毕,则表示在字符串S中找到了子串P。暴力做法是比较S[ 0 ]和P[ 0 ],若相等则继续比较S[ 1 ]和P[ 1 ]......,一个字符串S和一个更短的字符串P,求出模式串 P 在字符串 S 中所有出现的位置的起始下标。第二行输入字符串 P。原创 2025-02-26 20:47:24 · 878 阅读 · 0 评论 -
AcWing--154.滑动窗口(单调队列)
若不用单调队列,而是用普通队列来解,则一般大概有n个窗口(实际上会小于n),每个窗口里一般都有k个元素,每一次找最值都要扫描k个元素,则总的时间复杂度为O(nk);若采用单调队列来做,则可以直接在队头取到该窗口的最小值,时间复杂度从O(k)变为O(1),则总的时间复杂度从O(nk)变为O(n)在一个窗口中,若后一个元素<当前元素,则最小值一定不会取当前元素,所以当前元素就是冗余元素(没用的),删除。当前元素和前一个元素比较大小,若当前元素<=前一元素,则删除前一元素。,直到当前元素>=前一元素。原创 2025-02-19 21:51:40 · 411 阅读 · 0 评论 -
ACWing--基础算法--贪心(部分题解)
①~⑭为代码中for循环的过程,画了☆的表示这一步是在排序(每次有变化小根堆就会自动排序,将最小的值放到顶部,较大的值往下放,注意:堆只能访问根节点,其余结点无法操作)。②:区间1的右端点大于区间2的左端点,说明两区间有交集,需要重新开一个组,将区间2压入;⑩:区间3的右端点大于区间5的左端点,说明两区间有交集,需要重新开一个组,将区间5压入;④:区间3的左端点大于区间1的右端点,将区间1弹出;⑦:区间4的左端点大于区间2的右端点,将区间2弹出;⑫:区间6的左端点大于区间3的右端点,将区间3弹出;原创 2024-03-18 21:37:11 · 634 阅读 · 0 评论 -
AcWing--803.区间和并
原题:给定 n 个区间 [li,ri],要求合并所有有交集的区间。注意如果在端点处相交,也算有交集。输出合并完成后的区间个数。例如:[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。原创 2024-03-17 16:03:55 · 435 阅读 · 0 评论 -
AcWing--802.区间和(离散化)
(百度百科):离散化,就是把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小(这带来的是存储空间得缩小,访问效率的提高,即提高时空效率)。例如:原数据:1,999,100000,15;处理后:1,3,4,2;(1映射到1,999映射到3......)原数据:{100,200},{20,50000},{1,400};处理后:{3,4},{2,6},{1,5};假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。原创 2024-03-15 21:21:22 · 569 阅读 · 0 评论 -
AcWing--798.差分矩阵(差分)
输入一个 n 行 m列的整数矩阵,再输入 q 个操作,每个操作包含五个整数 x1,y1,x2,y2,c,其中 (x1,y1) 和 (x2,y2) 表示一个子矩阵的左上角坐标和右下角坐标。①先b(x1,y1)+=c ,相当于 图中 a 矩阵(x1,y1)的右下角全部都加 c,即图中的右下角蓝色大矩形;接下来 q 行,每行包含 5 个整数 x1,y1,x2,y2,c,表示一个操作。④这时会发现绿色和红色区域重复的小方块的数据减去了两次 c,所以要加上 c;每个操作都要将选中的子矩阵中的每个元素的值加上 c。原创 2024-02-10 21:32:40 · 555 阅读 · 0 评论 -
AcWing--801.二进制中1的个数(位运算)
n & -n电脑存的是二进制的补码,正数的补码是它本身,负数的补码是原码按位取反再加一01010的最后一个 1 为 100101000的最后一个 1 为 1000举例:十进制数 10,对应的二进制原码为01010(首位0表示正数)十进制数-10,对应的二进制原码为 11010(首位1表示负数)11010的按位取反为:10101,再加一为:10111010101011100010所以最后结果为10,即为十进制数 10 转化为二进制后最后一个1。原创 2024-02-09 22:22:29 · 522 阅读 · 0 评论 -
埃氏筛 欧拉筛 c++
1.素数是仅能被它本身和1整除的任何整数。2.埃拉托斯特尼筛法,简称埃氏筛,是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法。要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。3.判断一个数是不是素数,我们只用判[2,n]内有没有它的因子。在筛合数的时候也可以这样做,因为一个合数的最小质因子一定小于等于n。证明如下:设n为合数,那么n必有两个约数a,b 使得a*b=n。则a、b两个数中必有一个大于等于n,一个小于等于。原创 2023-07-13 17:05:26 · 453 阅读 · 0 评论
分享