![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
SumFunction
这个作者很懒,什么都没留下…
展开
-
扩展欧几里得算法
裴蜀定理1、若有整数a,b 则一定存在整数x,y使得ax+by=gcd(a,b)2、存在无限多整数x,y 使得ax+by=d成立 其中d是gcd(a,b)倍数 这条定理可以由上面推得3、若a、b互质 则使得ax+by=c满足不定方程成立的c有无限多个因为gcd(a,b)=1 由推论2可得推论3成立4、若限制上面的x,y>0 则会有有限多个的c使得ax+by=c不成立5、若ab不互质 则使得ax+by=c会有无限多个c使得该不定方程不成立因为只有c满足gcd(a,b)的倍数时才满足不定方程原创 2021-03-22 00:39:29 · 148 阅读 · 0 评论 -
二维差分
二维差分思想前面是一维 现在是对二维数组某个值 a[i][j]构造差分数组d使得满足对差分数组求二维前缀和就是a[]i[j]现在更新某个二维数组里某个矩阵的值 对差分数组的更新公式如下d[x1][y1] += c;d[x2+1][y1] -= c;d[x1][y2+1] -= c;d[x2+1][y2+1] += c;类比一维前缀和 至于为什么d[x2+1][y2+1]为什么要多加c因为求解a[x2+1][y2+1]的二位前缀和 c被减去了两次 所以我们需要多补上一个c题目描述输入一个原创 2021-03-18 23:54:28 · 369 阅读 · 0 评论 -
一维差分
为什么要用差分可以快速查询对一个区间更新数值后得到的结果a为原数组 d为差分数组则 d1 = a1 d2 = a2-a1 … dn = an-an-1可以发现 d的前缀和就是a[i]如何实现对a数组区间的快速更新例如 对a数组区间[l,r]实现+c操作则我们只需要对d[l] + c ,d[r+1]-c即可因为 按照差分数组的定义 对d求前缀和求a(i,r)上每个值 区间[l,r]上d[l]都实现了+c操作但a[r+1]没有+c 所以我们需要打补丁 在d[r+1]上减去c 这样求d前缀和来得原创 2021-03-18 23:22:14 · 75 阅读 · 0 评论 -
二位前缀和模板
题目描述输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。输入格式第一行包含三个整数 n,m,q。接下来 n 行,每行包含 m 个整数,表示整数矩阵。接下来 q 行,每行包含四个整数 x1,y1,x2,y2,表示一组询问。输出格式共 q 行,每行输出一个询问的结果。数据范围1≤n,m≤1000,1≤q≤200000,1≤x1≤x2≤n,1≤y1≤y2≤m,原创 2021-03-18 22:56:56 · 124 阅读 · 0 评论 -
一行代码实现最大公约数模板
数论有如下性质c能整除a也能整除b则c能整除x1a+x2b x1和x2是前面系数现在证明 (a,b)最大公约数=(b,a%b)最大公约数证明如下a%b = a-cb c=a整除b用gcd表示两个数最大公数则gcd(a,b)=gcd(b,a-cb)已知(a,b)中每个约数都能被a,b整数 则由数论性值 可以推出每个约数也能被a-cb整除(b,a-cb)中每个约数能被b,a-cb整数 那也能被a-cb+c*b整除 由数论性值得到则可以推左边每个约数=右边每个约数 所以(a,b)最大公约数=(原创 2021-03-14 23:29:06 · 249 阅读 · 0 评论 -
并查集1
并查集 最基本作用:判断两个元素是否在同一个集合中基本原理:每个集合都是用一棵树表示 集合用这个树的祖宗节点表示 用一个parent数组来存储每个结点的父亲节点 祖宗节点的父亲节点是自己问题1:判断树根 也就是if(parent[x]==x)问题2:求解元素的集合编号 while(parent[x] != x) x = parent[x];问题3:合并两个集合操作 设px是x元素的集合编号 py是y元素的集合编号 则只需要将parent[px] = py即可 也就是将x元素的集合祖宗的父亲认为y元素原创 2021-03-13 19:56:06 · 74 阅读 · 0 评论 -
分解质因数
题目描述一个合数一定可以被多个质数相乘表示得到例如 100可以被分解为100=225*5算法流程 时间复杂度O(sqrt(n))循环遍历i到sqrt(n) 如果当前i能被当前n整除 说明当前i是当前n的因子代码如下:#include<iostream>using namespace std;const int N = 10010;int res[N];void divid(int n){//分解质因数 for(int i = 2;i <= n/i;i++){//输出原创 2021-03-13 19:12:44 · 529 阅读 · 0 评论 -
求约数
求一个数n的所有约数例如 6的所有约数为 1,2,3,6算法思路暴力枚举 不过只需要枚举到i<=n/i 也就是sqrt(n)就行了#include<iostream>#include<vector>#include<algorithm>using namespace std;vector<int> res;void divid(int n){ for(int i = 1;i <= n/i;i++){ if(n % i ==原创 2021-03-13 17:10:31 · 310 阅读 · 0 评论 -
筛质数
题目描述求出1-n中所有的质数朴素筛法 时间复杂度O(nlogn)创建一个primes数组 下标表示这个数是某个数的倍数从1-n开始枚举1、判断第i个数是不是前面1~i-1个数的倍数 如果是 则不是素数 反之则是素数2、标记i的倍数进vis数组直到n代码如下:#include<iostream>using namespace std;const int N = 500;int vis[N];int primes[N];void get_primes(int n){ i原创 2021-03-13 16:48:53 · 82 阅读 · 0 评论 -
快速幂
给定n组ai,bi,pi,对于每组数据,求出abii mod pi的值。输入格式第一行包含整数n。接下来n行,每行包含三个整数ai,bi,pi。输出格式对于每组数据,输出一个结果,表示abii mod pi的值。每个结果占一行。数据范围1≤n≤100000,1≤ai,bi,pi≤2∗109输入样例:23 2 54 3 9输出样例:41快速幂算法思路该算法能在log(k)时间复杂度内求解a^k%p的结果将ak 分解为a^(k)2进制例如 求解45 的结果5的二进制表示原创 2021-03-12 23:06:40 · 92 阅读 · 0 评论 -
线性DP 最短编辑距离
给定两个字符串A和B,现在要将A经过若干操作变为B,可进行的操作有:删除–将字符串A中的某个字符删除。插入–在字符串A的某个位置插入某个字符。替换–将字符串A中的某个字符替换为另一个字符。现在请你求出,将A变为B至少需要进行多少次操作。输入格式第一行包含整数n,表示字符串A的长度。第二行包含一个长度为n的字符串A。第三行包含整数m,表示字符串B的长度。第四行包含一个长度为m的字符串B。字符串中均只包含大写字母。输出格式输出一个整数,表示最少操作次数。数据范围1≤n,m≤1000原创 2021-03-12 19:32:14 · 121 阅读 · 0 评论 -
线性DP 最长公共子序列
给定两个长度分别为N和M的字符串A和B,求既是A的子序列又是B的子序列的字符串长度最长是多少。输入格式第一行包含两个整数N和M。第二行包含一个长度为N的字符串,表示字符串A。第三行包含一个长度为M的字符串,表示字符串B。字符串均由小写字母构成。输出格式输出一个整数,表示最大长度。数据范围1≤N,M≤1000输入样例:4 5acbdabedc输出样例:3DP分析线性DP问题首先考虑集合 f(i,j)表示A串区间(1,i) B串区间(1,j)的所有最长公共子序列集合该.原创 2021-03-10 00:41:55 · 183 阅读 · 0 评论 -
线性DP 最长上升子序列I
给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数N。第二行包含N个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1≤N≤1000,−109≤数列中的数≤109输入样例:73 1 2 1 8 5 6输出样例:4说明:对于样例的最长上升子序列为1 2 5 6DP思路这是一道线性DP问题我们定义集合f(i)表示以第i个数结尾的数的所有上升子序列其f(i)属性可以表示为以第i个数结尾的所有上升子序列的最大长度则状态转原创 2021-03-09 23:50:12 · 111 阅读 · 0 评论 -
环形区间DP 环形石子合并
题目描述在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分.输入输出格式输入格式:数据的第1行试正整数N,1≤N≤100,表示有N堆石子.第2行有N个数,分别表示每堆石子的个数.输出格式:输出共2行,第1行为最小得分,第2行为最大得分.输入输出样例输入样例#1:44 5 9 4输出样例#1:4354环形区间DP思路相比原创 2021-03-07 16:43:04 · 168 阅读 · 0 评论