1、2. 字典树3. 后缀树4. 线段树5. 并查集6. 二叉堆7. 逆序数(归并排序)8. 树状DP9. 欧拉路10. 八数码11. 高斯消元法12. 字符串匹配(KMP算法)13. 全排列,全组合14. 二维线段树15. 稳定婚姻匹配16. 后缀数组17. 左偏树18. 标准RMQ-ST19. 度限制最小生成树20. 最优比率生成树(0/1分数规划)21. 最小花费置换22. 区间K大数23. LCA - RMQ-ST24. LCA Tarjan25. 指数型母函数26. 指数型母函数(大数据)27. 单词前缀树(字典树+KMP)28. FFT(大数乘法)29. 二分图网络最大流最小割30.
2、混合图欧拉回路31. 无源汇上下界网络流32. 二分图最小点权覆盖33. 带约束的轨道计数(Burnside引理)34. 三分法求函数波峰35. 单词计数,矩阵乘法36. 字符串和数值hash37. 滚动队列,前向星表示法38. 最小点基,最小权点基第一章 常用函数和STL一.常用函数#includeintgetchar(void);/读取一个字符,一般用来去掉无用字符char*gets(*str/读取一行字符串stdlib.h*malloc(size_tsize/动态内存分配,开辟大小为的空间qsort(*buf,num,size,(*compare)(const*,const*)/快速排序
3、Sample:compare_ints(void*a,b)int*arg1=(int*)a;int*arg2b;if(*arg1*arg2return-1;else=0;1;array-2,99,0,-743,2,3,4;array_size7;array,array_size,sizeof(int),compare_intsmath.h/求反正弦,arg-1,1,返回值-pi/2,+pi/2doubleasin(arg/求正弦,arg为弧度,弧度=角度*Pi/180.0,返回值-1,1sin(/求e的arg次方exp(/求num的对数,基数为elog(num/求num的根sqrt(/求bas
4、e的exp次方pow(base,expstring.h/初始化内存,常用来初始化数组memset(buffer,ch,countthe_array,sizeof(the_array)/printf是它的变形,常用来将数据格式化为字符串sprintf(*buffer,*format,.sprintf(s,%d%d,123,4567);/s=1234567/scanf是它的变形,常用来从字符串中提取数据sscanf(result100=24hellostr100;num;result,%d%snum,str/num=24;str=;/字符串比较,返回值0代表str10代表str1str2strcm
5、p(*str1,*str2二.常用STL标准container概要vector 大小可变的向量, 类似数组的用法, 容易实现删除list 双向链表queue 队列, empty(), front(), pop(), push()stack 栈, empty(), top(), pop(), push()priority_queue 优先队列, empty(), top(), pop(), push()set 集合map 关联数组, 常用来作hash映射标准algorithm摘录for_each() 对每一个元素都唤起(调用)一个函数find() 查找第一个能与引数匹配的元素replace()
6、用新的值替换元素, O(N)copy() 复制(拷贝)元素, O(N)remove() 移除元素reverse() 倒置元素sort() 排序, O(N log(N)partial_sort() 部分排序binary_search() 二分查找merge() 合并有序的序列, O(N)C+ String摘录copy() 从别的字符串拷贝empty() 判断字符串是否为空erase() 从字符串移除元素find() 查找元素insert() 插入元素length() 字符串长度replace() 替换元素substr() 取子字符串swap() 交换字符串第二章 重要公式与定理1.Fibonac
7、ci Number0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610 Formula:2.Lucas Number1, 3, 4, 7, 11, 18, 29, 47, 76, 123.3.Catalan Number1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012 Application:1)将 n + 2 边形沿弦切割成 n个三角形的不同切割数n = 2;n = 3;2)n + 1个数相乘, 给每两个元素加上括号的不同方法数 (1 (2 3), (1 2
8、) 3) (1 (2 (3 4), (1 (2 3) 4) , (1 2) (3 4), (1 (2 3) 4), (1 2) 3) 4)3)n 个节点的不同形状的二叉树数(严数据结构P.155)4)从n * n 方格的左上角移动到右下角不升路径数4.Stirling Number(Second Kind)S(n, m)表示含n个元素的集合划分为m个集合的情况数或者是n个有标号的球放到m 个无标号的盒子中, 要求无一为空, 其不同的方案数Special Cases:5.Bell Numbern 个元素集合所有的划分数6.Stirling7.Sum of Reciprocal Approxima
9、tionEulerGamma = 0.57721566490153286060651209;8.Young TableauYoung Tableau(杨式图表)是一个矩阵, 它满足条件:如果格子i, j没有元素, 则i+1, j也一定没有元素如果格子i, j有元素ai, j,则i+1, j要么没有元素, 要么ai+1, j ai, jYn代表n个数所组成的杨式图表的个数9.整数划分将整数n分成k份, 且每份不能为空, 任意两种分法不能相同1) 不考虑顺序for(intp=1;p=np+)i=p;i=1j-)dpij+=dpi-pj-1;cout 0; V /= Base) DataLen+ =
10、 V % Base; xnum(char S); xnum& operator=(const xnum& V) Len = V.Len;memcpy(Data, V.Data, Len * sizeof *Data); return *this; int& operator(int Index) return DataIndex; int operator(int Index) const return DataIndex; void print() printf(%d,Len=0?0:DataLen-1); for(int i=Len-2;i=0;i-) for(int j=Base/10;
11、j/=10)printf(,Datai/j%10);xnum:xnum(char S) int I, J;DataLen = 0 = 0;J = 1; for (I = strlen(S)-1; I I-) DataLen += (SI - 0) * J;J *= 10; if (J = Base) J = 1, Data+Len = 0; if (DataLen 0) Len+;int compare(const xnum& A, const xnum& B) int I; if (A.Len != B.Len) return A.Len B.Len ? 1 : -1; for (I = A
12、.Len - 1; I = 0 & AI = BI; I-); if (I BI ?xnum operator+(const xnum& xnum R;int I;int Carry = 0; for (I = 0; I A.Len | I I+) if (I A.Len) Carry += AI; B.Len) Carry += BI; RI = Carry % Base;Carry /= Base;R.Len = I;return R;xnum operator-(const xnum&R.Len = A.Len; int I; R.Len; RI = AI - Carry; B.Len)
13、 RI -= BI; if (RI 0 & RR.Len - 1 = 0) R.Len-;xnum operator*(const xnum& A, const int B)if (B = 0) return 0; xnum R;hugeint Carry = 0; A.Len | Carry A.Len) Carry += hugeint(AI) * B;RI = Carry % Base; Carry /= Base; if (B.Len = 0) return 0; A.Len; hugeint Carry = 0; for (int J = 0; J J+) if (J B.Len)
14、Carry += hugeint(AI) * BJ; if (I + J = R.Len) RR.Len+ = Carry % Base; else RI + J = Carry % Base; return R;xnum operator/(const xnum&hugeint C = 0;= 0; I-)C = C * Base + AI;RI = C / B;C %= B; R.Len = A.Len; return R;/divxnum R, Carry = 0;int Left, Right, Mid; I-) Carry = Carry * Base + AI;Left = 0;R
15、ight = Base - 1; while (Left Right) Mid = (Left + Right + 1) / 2; if (compare(B * Mid, Carry) (istream& In, xnum& V) char Ch; for (V = 0; In Ch;) V = V * 10 + (Ch - if (cin.peek() = ) break; return In;ostream& operator(ostream& Out, const xnum&Out J /= 10) Out = n-m+1; i -)sum = sum*i; for(i = 1; i
16、= m; i +)sum = sum/i;return sum;#define MAXN 9999#define DLEN 4class BigNum private:int a1000;/可以控制大数的位数int len; /大数长度public:BigNum() len = 1;memset(a,0,sizeof(a); BigNum(const int);BigNum(const char*); BigNum(const BigNum &BigNum &operator=(const BigNum & BigNum operator+(const BigNum &) const; BigNum operator-(const BigNum & BigNum operator*(const BigNum & BigNum operator/(const int & BigNum operator(const int &
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1