- 博客(42)
- 收藏
- 关注
原创 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
258
原创 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
334
原创 AcWing--872.最大公约数(欧几里得算法/辗转相除法)
给定 n 对正整数 ai,bi,请你求出每对数的最大公约数。接下来 n 行,每行包含一个整数对 ai,bi。输出共 n 行,每行输出一个整数对的最大公约数。第一行包含整数 n。
2025-03-19 20:03:29
221
原创 AcWing--871.约数之和
给定 n 个正整数 ai,请你输出这些数的乘积的约数之和,答案对 10^9+7 取模。输出一个整数,表示所给正整数的乘积的约数之和,答案需对 10^9+7 取模。接下来 n 行,每行包含一个整数 ai。第一行包含整数 n。
2025-03-15 16:54:32
290
原创 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
303
原创 AcWing--869.试除法求约数
硬写一定会超时,就是因为在求约数的时候重复了,例如a=120,2为他的一个约数,对应的60为他的另一个更大的约数,此时找到了2,也就相当于找到了60,这样节约一般的时间(只用遍历更小的那一半约数)。给定 n 个正整数 ai,对于每个整数 ai,请你按照从小到大的顺序输出它的所有约数。输出共 n 行,其中第 i 行输出第 i 个整数 ai 的所有约数。接下来 n 行,每行包含一个整数 ai。第一行包含整数 n。
2025-03-11 20:40:10
156
原创 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
341
原创 AcWing--867.分解质因数
对于每个正整数 ai,按照从小到大的顺序输出其分解质因数后,每个质因数的底数和指数,每个底数和指数占一行。给定 n 个正整数 ai,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。每个正整数的质因数全部输出完毕后,输出一个空行。接下来 n 行,每行包含一个正整数 ai。第一行包含整数 n。
2025-03-01 21:31:30
280
原创 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
153
原创 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
751
原创 AcWing--154.滑动窗口(单调队列)
若不用单调队列,而是用普通队列来解,则一般大概有n个窗口(实际上会小于n),每个窗口里一般都有k个元素,每一次找最值都要扫描k个元素,则总的时间复杂度为O(nk);若采用单调队列来做,则可以直接在队头取到该窗口的最小值,时间复杂度从O(k)变为O(1),则总的时间复杂度从O(nk)变为O(n)在一个窗口中,若后一个元素<当前元素,则最小值一定不会取当前元素,所以当前元素就是冗余元素(没用的),删除。当前元素和前一个元素比较大小,若当前元素<=前一元素,则删除前一元素。,直到当前元素>=前一元素。
2025-02-19 21:51:40
317
原创 913.排序不等式--排队打水
从上面对题目例子的分析可以发现,实际上的总等待时间 sum 加了6次第一个人的打水时间,加了5次第二个的打水时间......,加了1次第六个人的打水时间,加了0次最后一个人的打水时间,所以可以推出公式:sum=a[1]*(n-1)+a[2]*(n-2)+a[3]*(n-3}+...+a[n-1]*1+a[n]*0。有 n 个人排队到 1 个水龙头处打水,第 i 个人装满水桶所需的时间是 ti,请问如何安排他们的打水顺序才能使所有人的等待时间之和最小?③求前缀和,s[i]=s[i-1]+a[i]。
2024-03-30 11:27:23
309
原创 ACWing--基础算法--贪心(部分题解)
①~⑭为代码中for循环的过程,画了☆的表示这一步是在排序(每次有变化小根堆就会自动排序,将最小的值放到顶部,较大的值往下放,注意:堆只能访问根节点,其余结点无法操作)。②:区间1的右端点大于区间2的左端点,说明两区间有交集,需要重新开一个组,将区间2压入;⑩:区间3的右端点大于区间5的左端点,说明两区间有交集,需要重新开一个组,将区间5压入;④:区间3的左端点大于区间1的右端点,将区间1弹出;⑦:区间4的左端点大于区间2的右端点,将区间2弹出;⑫:区间6的左端点大于区间3的右端点,将区间3弹出;
2024-03-18 21:37:11
529
原创 AcWing--803.区间和并
原题:给定 n 个区间 [li,ri],要求合并所有有交集的区间。注意如果在端点处相交,也算有交集。输出合并完成后的区间个数。例如:[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。
2024-03-17 16:03:55
390
原创 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
478
原创 团体程序设计天梯赛--练习集(PTA)--部分题目
的不包含空格的非空字符串,前两个数字表示需要剪切的位置,后两个字符串表示插入位置前和后的字符串,用一个空格隔开。如果有多个可插入的位置,选择最靠近当前操作字符串开头的一个。输入第一行是一个长度小于等于 200 的字符串 S,表示原始字符串。请实现一个简单的具有剪切和粘贴功能的文本编辑工具。每次操作后的字符串即为新的当前字符串。第二行是一个正整数 N (1≤N≤100),表示要进行的操作次数。单位 杭州百腾教育科技有限公司。输出一行,表示操作后的字符串。剪切的位置保证总是合法的。L1-094 剪切粘贴。
2024-03-13 16:50:31
830
原创 向0取整c++
也就是说对于大于 0的结果向下取整,例如 5/3=1,对于小于 0的结果向上取整,例如 5/(1−4)=−1。C++和Java中的整除默认是向零取整;Python中的整除。函数中的整除也是向下取整,一般不能直接使用。默认向下取整,因此Python的。一般整除是指向 0取整。
2024-03-07 20:05:26
554
原创 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
526
原创 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
406
原创 2024牛客寒假算法基础集训营1--补题复盘
以"向右"按钮为例,点击一次该按钮会显示接下来的六道题,特别的,如果接下来的六道题超出了总题数,则会将最后一题放到当前显示的最右侧。这道题也是很简单的数学题,只用到了相似三角形,但是一定要审清题目!不要像我一样潜意识以为是要求白墙s上的最大阴影面积/流泪,其实求的是土地上的阴影面积,即xoy平面上的最大阴影面积。现在,在本次比赛的主页点击"排名",您就会看到本场比赛的榜单,可以看到,榜单中直接列出了本场比赛的所有题目。上述过程中,显示的六道题中,最左侧的题目编号分别是 A、G、I、C、A,因此答案为 4。
2024-02-04 20:28:10
1067
原创 The 2023 ICPC Asia Regionals Online Contest (2)-2023 ICPC网络赛第二场部分题解 I,M
共n个阶段,要从第0个阶段到达第n个阶段,有两种方法:(1)每天走一个阶段,第n天后到达第n个阶段。(2)开启“挑战” 模式,成功直接到第n阶段,成功概率为p/1e5;共有n道题,每道题有(1-pi)的概率需要 ai 的时间AC,有 pi 的概率需要(ai+bi)的时间AC,最优策略下,只会在一个点挑战,该点成功即到达第n阶段,枚举每个点作为挑战点,取最小值。根据ICPC规则,对于第i道题,它的罚时为从比赛开始直到它被AC的总时间。现给出n道题的ai,bi,qi,求做完所有题目需要的最小期望罚时。
2023-09-25 21:27:17
961
1
原创 牛客竞赛-新手上路 1047-得不到的爱情 顺序结构
来源:牛客网时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K。
2023-07-23 17:20:13
556
原创 牛客竞赛-新手上路 1041-纸牌 顺序结构
来源:牛客网时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 131072K,其他语言262144K。
2023-07-22 18:18:15
517
原创 牛客竞赛-新手上路 1040-白兔的分身术 顺序结构
来源:牛客网时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K。
2023-07-20 13:45:37
417
原创 牛客竞赛-新手上路 1038-长方体 顺序结构
来源:牛客网时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K。
2023-07-20 13:25:57
165
原创 埃氏筛 欧拉筛 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
361
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人