随笔分类 - 算法
分享必须掌握的高频算法
摘要:扩展欧几里得算法 给定 n 对正整数 ai,bi 对于每对数,求出一组 xi,yi 使其满足 ai×xi+bi×yi=gcd(ai,bi)。 输入格式 第一行包含整数 n。 接下来 n 行,每行包含两个整数 ai,bi。 输出格式 输出共 n 行,对于每组 ai,bi,求出一组满足条件的 xi,yi
阅读全文
摘要:快速幂 给定 n 组 ai,bi,p对于每组数据,求出 abiimodpii 的值。 输入格式 第一行包含整数 nn。 接下来 nn 行,每行包含三个整数 ai,bi,piai,bi,pi。 输出格式 对于每组数据,输出一个结果,表示 abiimodpiaibimodpi 的值。 每个结果占一行。
阅读全文
摘要:筛数求欧拉函数 给定一个正整数 nn,求 1∼n1∼n 中每个数的欧拉函数之和。 输入格式 共一行,包含一个整数 nn。 输出格式 共一行,包含一个整数,表示 1∼n1∼n 中每个数的欧拉函数之和。 数据范围 1≤n≤1061≤n≤106 输入样例: 6 输出样例: 12 #include <ios
阅读全文
摘要:欧拉函数 给定 nn 个正整数 ai,请你求出每个数的欧拉函数。 欧拉函数的定义 1∼N 中与 N 互质的数的个数被称为欧拉函数,记为 ϕ(N)。 若在算数基本定理中,N=pa1pa2…pam,则: ϕ(N)= N×p1−1p1×p2−1p2×…×pm−1pm 输入格式 第一行包含整数 nn。 接下
阅读全文
摘要:欧几里得算法 最大公约数 给定 n 对正整数 ai,bi,请你求出每对数的最大公约数。 输入格式 第一行包含整数 nn。 接下来 n 行,每行包含一个整数对 ai,bi。 输出格式 输出共 n 行,每行输出一个整数对的最大公约数。 数据范围 1≤n≤105 1≤ai,bi≤2×109 输入样例: 2
阅读全文
摘要:参考埃及筛法的例题 线性筛法 #include <iostream> #include <algorithm> using namespace std; const int N = 10000010; int primes[N], cnt; bool st[N]; void get_primes(i
阅读全文
摘要:筛法 筛质数 给定一个正整数 nn,请你求出 1∼n 中质数的个数。 输入格式 共一行,包含整数 nn。 输出格式 共一行,包含一个整数,表示 1∼n 中质数的个数。 数据范围 1≤n≤106 输入样例: 8 输出样例: 4 思想就是将每个数的倍数全部删掉,剩余的就是所有质数 未优化 #includ
阅读全文
摘要:(2)分解质因数 分解质因数 给定 n 个正整数 ai,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。 输入格式 第一行包含整数 n。 接下来 n 行,每行包含一个正整数 ai。 输出格式 对于每个正整数 ai,按照从小到大的顺序输出其分解质因数后,每个质因数的底数和指数
阅读全文
摘要:1、质数 在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数,或者交素数。 (1)质数的判定 试除法 时间复杂度O(sqrt(n)) #include <iostream> #include <algorithm> using namespace std; bool is_prime(
阅读全文
摘要:求组合数2 给定 n 组询问,每组询问给定两个整数 a,b,请你输出 Cbamod(109+7) 的值。 输入格式 第一行包含整数 n。 接下来 n 行,每行包含一组 a 和 b。 输出格式 共 n 行,每行输出一个询问的解。 数据范围 1≤n≤10000 1≤b≤a≤105 输入样例: 3 3 1
阅读全文
摘要:求组合数 III 卢克斯定理 给定 nn 组询问,每组询问给定三个整数 a,b,p,其中 p 是质数,请你输出 Cbamodp的值。 输入格式 第一行包含整数 n。 接下来 n 行,每行包含一组 a,b,p。 输出格式 共 n 行,每行输出一个询问的解。 数据范围 1≤n≤20 1≤b≤a≤10^`
阅读全文
摘要:求组合数 1 给定 n 组询问,每组询问给定两个整数 a,b,请你输出 Cbamod(109+7) 的值。 输入格式 第一行包含整数 n。 接下来 n 行,每行包含一组 a 和 b。 输出格式 共 n 行,每行输出一个询问的解。 数据范围 1≤n≤10000 1≤b≤a≤2000 输入样例: 3 3
阅读全文
摘要:求组合数 IV 输入 a,b,求 Cba 的值。 注意结果可能很大,需要使用高精度计算。 输入格式 共一行,包含两个整数 a 和 b。 输出格式 共一行,输出 Cba 的值。 数据范围 1≤b≤a≤5000 输入样例: 5 3 输出样例: 10 #include <iostream> #includ
阅读全文
摘要:满足条件的01序列 卡特兰数 给定 n 个 0 和 n 个 1,它们将按照某种顺序排成长度为 2n 的序列,求它们能排列成的所有序列中,能够满足任意前缀序列中 0 的个数都不少于 1 的个数的序列有多少个。 输出的答案对 109+7 取模。 输入格式 共一行,包含整数 n。 输出格式 共一行,包含一
阅读全文
摘要:高斯消元 高斯消元解线性方程组 输入一个包含 nn 个方程 nn 个未知数的线性方程组。 方程组中的系数为实数。 求解这个方程组。 下图为一个包含 mm 个方程 nn 个未知数的线性方程组示例: 输入格式 第一行包含整数 nn。 接下来 nn 行,每行包含 n+1n+1 个实数,表示一个方程的 nn
阅读全文
摘要:###深度优先 排列数字 给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。 现在,请你按照字典序将所有的排列方法输出。 输入格式 共一行,包含一个整数 n。 输出格式 按字典序输出所有排列方案,每个方案占一行。 数据范围 1≤n≤7 输入样例: 3 输出样例: 1 2 3 1 3
阅读全文
摘要:宽度优先: 模板 queue 初始 while queue 不空 t 队头 扩展t 迷宫问题 给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。 最初,有一个人位于左上角 (1,1) 处,已知该人每次可以向上、下、左、右任
阅读全文
摘要:堆 小根堆:特点根结点是最小值,并且每棵子树的根结点是这棵子树的最小值。 注意存储的时候下标从1开始。 堆排序 输入一个长度为 n 的整数数列,从小到大输出前 m 小的数。 输入格式 第一行包含整数 n 和 m。 第二行包含 n 个整数,表示整数数列。 输出格式 共一行,包含 m 个整数,表示整数数
阅读全文
摘要:并查集: 1、将两个集合合并 2、询问两个元素是否在一个集合当中 基本原理:每个集合用一棵树来表示。树根的编号就是这个集合的编号。每个节点存储它的父节点,p[x]表示x的父节点 问题1:如何判断树根:if (p[x] == x) 问题2:如何求x的集合编号:while (p[x] != x) x =
阅读全文
摘要:Trie:高校地存储和查找字符串 集合的数据结构 如果要存储下面的单词 abcdef abdef aced bcdf bcff cdaa bcdc 星号表示存储的单词末尾标记,例如如果要查找aced 由于d的位置有星号,表名有该单词,如果查找abcf则没该单词,如果查找abcd由于d的位置没有星号,
阅读全文

浙公网安备 33010602011771号