模板
文章平均质量分 64
爱吃老谈酸菜的DV
选择适合自己的。
展开
-
二分三分法总结
一、概念在一个单调有序的集合中查找元素,每次将集合分为左右两部分,判断解在哪个部分中并调整集合上下界,重复直到找到目标元素。时间复杂度:O (logn)格式double left=“区间下界”,right=“区间上界”,mid;while(right - left > 1.0e-6){ mid = (right + left)/2; if(Caculate(mid)&...原创 2019-06-09 15:25:35 · 536 阅读 · 0 评论 -
2019年7月24日学习日记(二分、排序)
一、二分1.整数集合上的二分1)在单调增序列a中查找>=x的数最小的一个:while(l<r){ int mid=(l+r)/2; if(a[mid]>=x) r=mid; else l=mid+1;}return a[l];2)在单调增序列a中查找<=x的数中最大的一个while(l<r){ int mid=(l+...原创 2019-07-25 10:21:52 · 161 阅读 · 0 评论 -
2019年7月22日训练日记(位运算)
今天看了算法竞赛进阶指南里面的知识点,主要看的是位运算部分。总体来说今天看的知识点还比较简单。知识点1.&运算:同1为1,不同为0,同0为02.^运算:相同为0,不同为13.|运算:有1为1,全0为04.~运算:按位取反0->1,1->05.>>左移:在二进制下向左移动,低位以0填充,高位越界后舍弃1<<n=2^n //1向左移n位n&...原创 2019-07-23 09:21:47 · 178 阅读 · 0 评论 -
miller_rabin素数判定+Pollard-rho素因子分解
一、miller_rabin素数判定miller_rabin是一种素性测试算法,用来判断一个大数是否是一个质数。miller_rabin是一种随机算法,它有一定概率出错,设测试次数为s,那么出错的概率是 4^(−s)算法的理论基础:Fermat定理:若a是任意正整数(1≤ a≤ n−1),n是奇素数,则 a^(n-1) ≡ 1 mod n。如果n是一个奇素数,将n−1表示成2^s*r 的...原创 2020-02-22 17:57:50 · 473 阅读 · 0 评论 -
字典树判断是否为前缀编码
前缀编码:如果一个编码不是另一个编码的前缀,则为前缀编码。给定几个字符串,判断是否是前缀编码。直接字符串匹配。模板#include<bits/stdc++.h>using namespace std;#define maxn 100005 int ch[maxn][15];int val[maxn];int sz;char str[20];int num[ma...原创 2020-02-16 18:31:24 · 1818 阅读 · 0 评论 -
字典树(实现前缀匹配的问题)
举个例子,给你n个单词,每个单词的长度最大不超过len,给的顶一个长为length的长字符串,问这个字符串的前缀里包含多少个所给的单词。先分析这道题,需要建立一个字典树将所有的单词都放到一个树里(可以看成一个26叉树,每一层都是字母a~z),然后用长文本去暴力匹配这个树,记录个数。原创 2019-10-01 00:32:52 · 815 阅读 · 0 评论 -
三角函数公式
一、三角函数定义式sinA=a/csinA=a/c sinA=a/ccosA=b/c cosA=b/ccosA=b/ctanA=a/btanA=a/btanA=a/bcotA=b/acotA=b/acotA=b/asecA=c/bsecA=c/bsecA=c/bcscA=c/acscA=c/acscA=c/a二、同角三角函数基本关系1.倒数关系tanAcotA=1tanAcot...原创 2020-02-08 21:19:32 · 842 阅读 · 0 评论 -
Stirling公式【求解N!的位数】
一、定义斯特林公式(Stirling’s approximation)是一条用来取n的阶乘的近似值的数学公式。一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特林公式十分好用,而且,即使在n很小的时候,斯特林公式的取值已经十分准确。Stirling公式.:n!≈sqrt(2∗pi∗n)∗[(n/e)n]n!≈sqrt(2*pi*n)*[(n/e)^n]n!≈sqrt(2∗pi∗n)∗[...原创 2020-02-07 23:29:49 · 441 阅读 · 0 评论 -
佩尔方程
佩尔方程,是一种不定二次方程。Pell方程,古希腊和印度的数学家对此类方程的研究做了最早的贡献,由费马首先进行了深入研究,拉格朗日给出了解决方案,但后此类方程来却被欧拉误记为佩尔提出,并写入他的著作中。后人多称佩尔方程。原创 2020-02-03 21:58:59 · 1576 阅读 · 0 评论 -
ceil函数和floor函数
一、ceil函数1.头文件<cmath>2.作用:对小数向上取整,得到的不一定就是整数,因为他的返回值类型是double,有可能就是个小数,但是后边的小数部分全部是0;3. 格式:x=ceil(n);eg:ceil(3.4)=4;二、floor函数1.头文件<cmath>2.作用:对小数向下取整,得到的不一定就是整数,因为他的返回值类型是double,有可能就...原创 2020-02-02 17:30:45 · 1765 阅读 · 0 评论 -
求最大公共多项式
定义1 若h(x)既是f(x)的因式,又是g(x)的因式,则称h(x)是f(x)与g(x)的公因式。 因,c|f(x),c|g(x),并且c!=0,所以任意两个多项式都有公因式。定义2设d(x)是f(x)与g(x)的一个公因式,如果对于f(x)与g(x)的 任一个公因式h(x),都有h(x)|d(x)则称d(x)是f(x)与g(x)的一个最大公因式。定理如果d(x)是f(x)与g(x)的...原创 2020-02-02 16:22:59 · 755 阅读 · 0 评论 -
莫比乌斯反演入门
一、引入假设有两个函数F(n),f(d),且d∈{x| x|n(即n被d整除)}并有以下关系:F(n)等于所有f(d)之和。即二、推导【μ(d)】由公式得到:F(1)=f(1)F(2)=f(1)+f(2)F(3)=f(1)+ f(3)F(4)=f(1)+f(2)+f(4)F(5)=f(1)+f(5)F(6)=f(1)+f(2)+f(3)+f(6)进而:f(1)=F(1...原创 2020-01-18 15:57:56 · 214 阅读 · 0 评论 -
杜教筛模板
资源来源杜教筛还看不太懂,先转载大佬博客求杜教筛μ和φ#include<bits/stdc++.h>#include<tr1/unordered_map>#define N 6000010using namespace std;template<typename T>inline void read(T &x){ x=0; ...转载 2020-01-19 12:08:11 · 136 阅读 · 0 评论 -
本原勾股数组
本原勾股数组是指一个自然数三元组(a,b,c),其中a,b,c没有公因数,且满足a² +b² =c²。a,b奇偶性不同,且c是奇数若a是奇数,令a=st;则b=(s²-t²)/2;c = (s²+t²)/2。其中s>t>=1是没有公因数的奇数c-b与c+b总是平方数,并且c-b与c+b没有公因数。证明:假设有公因数,设d是c-b与c+b的公因数,则d也整除(c+b)+(...原创 2020-01-21 15:37:29 · 1494 阅读 · 0 评论 -
容斥原理、鸽笼原理
一、容斥定理定义:在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法。这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复。这种计数的方法称为容斥原理。举个例子:有A、B两个集合,如图:会发现求AUB时,A+B对AB加了两次,所以再减去一次...原创 2020-01-30 15:35:21 · 768 阅读 · 0 评论 -
求一个数所有因子个数和因子和
一、求一个数所有因子个数若能整除i,则不断除i,并记录i的次数。则除到最后存在两种情况当x == 1,这说明 x 没有其他因子了,得到答案;当x != 1, 这时 x 为其一个素数因子(且这个因子大于 根号x ),所以结果最后再乘2,得到因子个数。///求一个数所有因子的个数(包括1和它本身)ll countnum(ll x) { ll ans=1; for(ll i...原创 2020-01-27 23:22:55 · 1410 阅读 · 0 评论 -
原根
一、定义设m > 1 且 gcd(a, m) = 1, 则使得a^t ≡ 1(mod m) 成立的最小的正整数t称为a对模m的阶, 记为δm(a)。如果a的阶(mod m)为ϕ(m), 则称a为m的一个原根。 即若δm(a)=ϕ(m), 则称a为m的一个原根。二、定理定理1:若g是m的一个原根,则 g,g2,⋯,gϕ(m)各数对模m的最小剩余,恰是小于m且与m互素的ϕ(m)个正整数...原创 2019-12-21 17:11:19 · 197 阅读 · 0 评论 -
中国剩余定理(孙子定理)
主要是求解模不同的数同余的问题。eg:《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?”板子#include <iostream>#include <cstdio>#include<cstring>#include<string>using ...原创 2019-12-12 21:29:41 · 191 阅读 · 0 评论 -
常见定理(留个框架,定期维护)
一、欧拉定理对于互质的正整数a和n,有a^φ(n) ≡ 1(mod n)二、费马小定理假如a是整数,p是质数,且a,p互质(即两者最大公约数为1),那么a的(p-1)次方除以p的余数恒等于1若gcd(a,b)=1,则a^(p-1) ≡ 1 (mod n)三、威尔逊定理当且仅当p为素数时,(p-1)! ≡ -1 (mod p)四、卢卡斯定理用于计算组合数取模,其中p必须是素数五、...原创 2019-12-10 21:42:50 · 327 阅读 · 0 评论 -
矩阵快速幂(模板)
const int MAXN = 20;//最大294const int mod = 1000000007;//矩阵定义struct Node{ __int64 a[MAXN][MAXN]; int r;//行数 int c;//列数};//矩阵初始化void init(Node &mat, __int64 n){ for (int i =...原创 2019-12-03 20:31:34 · 122 阅读 · 0 评论 -
求解组合数(模板)
#include<cstdio>const int N = 200000 + 5;const int MOD = (int)1e9 + 7;int F[N], Finv[N], inv[N];//F是阶乘,Finv是逆元的阶乘 void init(){ inv[1] = 1; for(int i = 2; i < N; i ++){ i...原创 2019-11-30 23:17:11 · 183 阅读 · 0 评论 -
欧拉函数的求解(模板)
#include<cstdio>using namespace std;const int N = 1e6+10 ;int phi[N], prime[N];int tot;//tot计数,表示prime[N]中有多少质数 void Euler(){ phi[1] = 1; for(int i = 2; i < N; i ++){ if(...原创 2019-11-30 23:06:24 · 233 阅读 · 1 评论 -
求逆元(模板)
法一:费马小定理(快速幂)LL pow_mod(LL a, LL b, LL p){//a的b次方求余p LL ret = 1; while(b){ if(b & 1) ret = (ret * a) % p; a = (a * a) % p; b >>= 1; } return ret;}...原创 2019-11-29 20:33:41 · 186 阅读 · 0 评论 -
扩展的欧几里得原理
参考:https://blog.csdn.net/rising_fallmoon/article/details/10724239ax+by = gcd(a, b)这个公式一定有解:void extend_Eulid(LL a, LL b, LL &x, LL &y, LL &d){ if (!b) {d = a, x = 1, y = 0;} els...原创 2019-11-29 19:32:51 · 143 阅读 · 0 评论 -
最大公因数、最小公倍数(模板)
最大公因数(gcd)1.库函数:__gcd(a,b)2.辗转相除法:LL gcd(LL a, LL b){ LL t; while(b){ t = b; b = a % b; a = t; } return a;}3.递归:LL gcd(LL a, LL b){ if(b == 0) return...原创 2019-11-29 19:04:55 · 235 阅读 · 0 评论 -
筛法求素数(模板)
埃拉托斯特尼筛法(埃氏筛法)复杂度:O(nloglogn)const int N = 100000 + 5;bool prime[N];//prime[i]表示i是不是质数void init(){ for(int i = 2; i < N; i ++) prime[i] = true; for(int i = 2; i*i < N; i ++){//判断改成i*...原创 2019-11-29 18:15:41 · 149 阅读 · 0 评论 -
大小写字母判断和转换
一、大小写字母判断1.isalpha:头文件:C++:#include <cctype>C语言:#include<ctype.h>**功能:**判断字符ch是否为英文字母。当ch为英文字母a-z或A-Z时,返回非零值,但不一定是1;否则返回零。格式:isalpha(ch)2.isupper头文件:C++:#include <cctype>C语...原创 2019-11-19 21:06:53 · 1437 阅读 · 0 评论 -
C语言:整数转换十六进制数和八进制
我们之前已经学过进制转化的方法,都是手动转换:模某个数取余在C语言中有直接进制转换的方法,可以将一个十进制的整形数,直接转换成它的八进制或者16进制形式。%x:将整数输出为十六进制数%o:将整数输出为八进制数#include<bits/stdc++.h>using namespace std;int main(){ int x; while(~scanf(...原创 2019-11-19 19:31:15 · 3140 阅读 · 0 评论 -
Manacher算法(马拉车)
什么是ManacherManacher算法是用来求一个字符串中的最长回文串的算法。时间复杂度为:O(2*n) 比较高效。Manacher算法的原理如果直接对原有字符串进行操作的话,需要考虑回文串的长度是奇数还是偶数(偶数长度的回文串没有中心字符,不易处理)。暴力匹配的复杂度是:O(n^3)。所以有了马拉车算法。1. 第一步是对原有字符串进行预处理。在任意两个字符之间及字符串的首尾...原创 2019-10-28 00:22:20 · 157 阅读 · 0 评论 -
单源最短路(Dijkstra算法)
普通Dijkstra算法:dist[1]=0;其他的均为无穷大;若dist[y]>dist[x]+z,则dist[y]=dist[x]+z#include<bits/stdc++.h>>using namespace std;int a[1000][1000],d[1000],n,m;bool v[1000];void dijkstra(){ mem...原创 2019-09-10 20:57:23 · 146 阅读 · 0 评论 -
背包问题(模板)
0/1背包给定n个物品,其中第i个物品的提及为vi,价值为wi。将若干个物品放入容量为m的背包,在使物体总体积不超过m的前提下,物品的总价值和最大,求出此时的最大价值。int f[MAX_M+1];memset(f,0,sizeof(f));f[0]=0;for(int i=1; i<=n; i++) for(int j=m; j>=v[i]; j--) ...原创 2019-08-13 23:41:33 · 319 阅读 · 1 评论 -
快速乘、快速幂、大数快速幂、矩阵快速幂模板
一、快速乘long long mul(long long a,long long b,log long p){ long long ans=0; for(;b;b>>=1) { if(b&1) ans=(ans+a)%p; a=a*2%p; } return ans;}二、...原创 2019-07-26 10:10:28 · 218 阅读 · 0 评论 -
STL的模板
一、栈(stack)头文件:<stack>定义:stack<date_type>stack_name;操作:s.empty();//返回bool类型,表示栈内是否为空s.size();//返回栈元素个数s.top();//返回栈顶元素s.pop();//移除栈顶元素s.push(a);//向栈内压入一个元素a二、队列(queue)1.头文件:2.定义...原创 2019-04-30 23:37:22 · 229 阅读 · 0 评论 -
搜索的板子
广度优先搜索框架void BFS(){ ......//初始化起点入队 while(!Queue.empty()) //判断队列是否为空 { .....//获取队首元素 if(......)//结束条件 { ...... }//判断是否是终点 Tmp=Queue.To...原创 2019-05-08 23:58:59 · 182 阅读 · 0 评论 -
位运算模板
一、概述。位运算就是就是直接对整数在内存中的二进制位进行操作。 位运算的操作数是整数类型或字符型。C++提供了6种位运算符来进行位运算操作:& 按位与| 按位或^ 按位异或~ 按位取反<< 左移(左边消失,右边补0)>> 右移(右边消失,左边补符号位)二、具体操作。1.按位与 &运算将参与...原创 2019-05-30 22:36:09 · 280 阅读 · 0 评论 -
并查集模板
一、并查集的定义并查集是一种维护集合的数据结构,它的名字中“并”“查”“集”分别取自于Union(合并),Find(查找),Set(集合)这三个单词。也就是说,并查集支持下面两个操作:a)合并:合并两个集合;b)查找:判断两个元素是否在一个集合中。并查集通过一个数组来实现的:int father[n];其中father[i]表示元素i的父亲结点,而父亲结点本身也是这个集合内元素。对于同一个集合来...原创 2019-05-30 22:39:06 · 119 阅读 · 0 评论 -
进制转化模板
#include<cstdio>char d[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};char a[100];void turn(int n,int k){ int r = 0; while(n!=0) { a[++r] = n%k; n = n/k;...原创 2019-05-23 00:27:32 · 130 阅读 · 0 评论