随笔分类 - 算法-数论
摘要:如果要求子区间中全部数字的平均数大于100,可以先将区间中全部数字都减100,然后再判断区间和是否大于0,这样就可以避免平均数的值和区间长度相关的问题。 例题: AcWing 4487. 最长连续子序列 #include<bits/stdc++.h> using namespace std; typ
阅读全文
摘要:AcWing 1086. 恨7不成妻 数位dp例题 注意一个数不能分别对两个不同的数取余,只能将其保存下来 例如下面代码中的prev_b #include<bits/stdc++.h> using namespace std; typedef long long LL; LL MOD = 10000
阅读全文
摘要:C++中,对负数取模的结果为负数,需要特殊写取模函数 LL Mod(LL num,LL mod) { return (num%mod+mod)%mod; } View Code
阅读全文
摘要:整数部分,不断做除法,并取余数,最后倒置。 小数部分,不断做乘法,并取出整数部分。 例题 AcWing 4484. 有限小数 #include<bits/stdc++.h> using namespace std; typedef long long LL; LL GCD(LL a,LL b) {
阅读全文
摘要:根据三个等价条件,可以将n^2个数的GCD转化为n个数的GCD,且这n个数是连续的,可以通过线段树在log时间求解。 转化方式为 a与b的GCD=a与a-b的GCD,因为b=x*GCD。
阅读全文
摘要:设f(x)为x的最大平方除数(x的除数且为平方数),两数i与j相乘为平方数,等价于i/f(i)*j/f(j)为平方数且由于i / f(i)与j / f(j)不可能被任何质数整除两次以上则两数i与j相乘为平方数,等价于i / f(i)= j/ f(j)且f(i)可以在sqrt(i)的时间复杂度求出。
阅读全文
摘要:求 a/b(mod p) 其中,p是一个质数。 由费马小定理,有: b^(p-1)=1(mod p) 故 b^(p-2)=b^(-1)(mod p) 故 a/b(mod p) =a*b^(-1)(mod p)=a*b^(p-2)(mod p) 其中b^(p-2)可以用快速幂求解 注意:每一步都要取模
阅读全文
摘要:正方形经过任意的旋转(90°)和翻转后,只能有8种情况,而非4!种。 解释如下: http://www.360doc.com/content/18/0407/14/30048172_743530034.shtml 可以用4种旋转和1种翻转,遍历到这8中情况。 例题: LCP 58. 积木拼接 先处理
阅读全文
摘要:基数排序的思想是,对于一个给定的基数,每次排序构建基数数量的桶,并将数分配到桶里。 可以用count数组对桶中的数量计数,并转化为前缀数组记录桶中数字的位置。 LeetCode 164. 最大间距题解 class Solution { public: int maximumGap(vector<in
阅读全文
摘要:想要将集合中数字分为两个总和相等的集合,可以使用启发式优化的方式。 方法为:将数字依次加入到,两个集合中,当前和较小的集合。 这样可以将两个集合的误差降到一个数字的大小(|n|)级别,而非sum(|n|).
阅读全文
摘要:一、区间问题 1、区间选点、最大不相交区间数量 先按右端点排序,遇到完全不相交的区间则更新当前点,并将区间数量+1. 2、区间分组 将区间分组使组内区间不相交,求分组的最小数量。 左端点从小到大排序,从前往后处理每个区间,判断是否能放入当前的某个组中, 如果能,则更新组的右端点,否则开新组。 3、区
阅读全文
摘要:容斥原理:求集合交集的元素个数 Nim游戏:通过异或结果,直接判断游戏先手是否必胜 对于多个集合,可以计算sg函数,推广Nim
阅读全文
摘要:对质数p 根据费马小定理 有a^(p-1)≡1(mod p)(其中的p-1是p的欧拉函数,见数论的欧拉定理) 则a*a^(p-2)≡1(mod p) a^(p-2)≡1/a(mod p) 即有,1/a(逆元)≡a^(p-2)(mod p)
阅读全文
摘要:0和1的排列转化为二维路径 C(n,2n)-C(n-1,2n)=C(n,2n)/(n+1)(卡特兰数)
阅读全文
摘要:一、高斯消元 对矩阵n*n*x=列向量n 枚举每一列(c+,r) 1、找到当前列绝对值最大的行(如果为0则下一列) 2、将当前行与1、中的行的元素交换 3、将当前行的当前列元素化为1 4、利用当前行的元素,将后面行的当前列的元素化为0(先枚举后面的行,后面的行的当前列元素不为0,则每个列都消) 5、
阅读全文
摘要:1、欧拉函数的定义是,φ(n)是1-n中与n互质的数的个数 对n分解质因数得p1^a1*p2^a2*...*pn^an, 则φ(n)=n*(1-1/p1)(1-1/p2)*...*(1-1/pn); 对多个数求欧拉函数,可以结合线性筛法,对每个质数和被筛到的数,都根据已经被循环到的数的φ计算 1 c
阅读全文
摘要:一、质数 质数是大于1的自然数,只包含1和本身两个约数。 1、质数的判定,O(sqrt(n)) 试除法,推荐循环i<=n/i(防止溢出和sqrt计算) 2、分解质因子,O(logn~sqrt(n)) 1 for(int i=2;i<=n/i;i++) 2 { 3 if(n%i==0) 4 {//此时
阅读全文
摘要:整数哈希: 一般可以用取模的方式,模的数(数组长度)最好取质数且离2的幂尽可能远 哈希冲突可以用拉链法和开放寻址法解决 拉链法可以用链表进行模拟,插入时在哈希寻址处的链表头结点插入 开放寻址法则直接向后找(经验值,数据长度一般要开到题目数据范围的2-3倍),利用find函数找到数据的位置或应该插入的
阅读全文
摘要:关于信息熵,n个状态可携带log_2(n)的信息量n次实验,每次m个信息,共可判断(n+1)^m种情况
阅读全文
摘要:摩尔投票法可以解决数组元素数量时间复杂度为 O(n)、空间复杂度为 O(1)的统计问题。
阅读全文