ACM-模板
文章平均质量分 73
整理的常用的模版
_txg
平凡,是为了最美的荡气回肠
展开
-
Vision_数据结构_拓扑排序
///定义:/* 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序, 是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边 (u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称 为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,原创 2017-10-07 11:54:15 · 295 阅读 · 0 评论 -
Vision_MATH_三分查找
///定义:/* 在二分查找的基础上,在右区间(或左区间)再进行一次二分,这样的查找算法称为三分查找,也就是三分法。三分查找通常用来迅速确定最值。*////代码:/***name:三分查找**function:凸性函数中找最值*/int SanFen(int l,int r){///找凸点 while(l<r-1){ int m原创 2017-10-19 14:26:23 · 327 阅读 · 0 评论 -
Vision_MATH_高精度
/***name:高精度**function:大数运算**题意:求n的阶乘*/#includeusing namespace std;struct BigInt{ const static int mod = 10000; const static int DLEN = 4; int a[10000],len; BigInt() {原创 2017-10-19 15:05:21 · 244 阅读 · 0 评论 -
Vision_数据结构_线段树
///定义:/* 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,实际应用时一般还要开4N的数组以免越界,因此有时需要离散化让空间压缩。*////代码:/***name:一维线段树*原创 2017-10-19 15:26:45 · 380 阅读 · 0 评论 -
Vision_字符串_后缀数组
后缀数组原创 2017-10-05 13:14:20 · 466 阅读 · 0 评论 -
Vision_字符串_最小(大)表示法
///定义:/* 求解问题:n个字符串围成一个环,请从这个环中找出字典序最大(或最小)的长度为n的字符串(下标尽可能小)*////代码:/***name:最小表示法**function:求解循环字符串的最小字典序串**输入参数:字符串+字符串长度**输出参数:从某下标开始所得到的串字典序最小&&下标最小**复杂度:O(n)*/#include#incl原创 2017-10-05 13:53:30 · 291 阅读 · 0 评论 -
Vision_MATH_球盒问题+第二类Stirling数
///定义:/* 排列组合解决球盒的八大问题,其中用到排列组合公式和第二类斯特林公式*////代码:/***name:第二类斯特林数(第二类Stirling数)**function:解决求不同盒同等问题**公式: S(r, c) = S(r-1,c-1) + c * S(r-1, c)*/#include #include #include #in原创 2017-10-05 14:54:11 · 509 阅读 · 0 评论 -
Vision_数据结构_舞蹈连
///定义(ctrl+c):/* (1)历史: X算法是高德纳提出的解决精确覆盖问题的算法,而dancing links X算法则是DonKnuth(《计算机程序设计艺术》 的作者)提出的对X算法的一种高效实现,这种实现建立在如上所说的矩阵表示法上。 (2)算法思想: 由如上精确覆盖问题的矩阵表示法中,我们知道d原创 2017-10-06 16:02:57 · 352 阅读 · 0 评论 -
Vision_MATH_SG函数
///定义:/* 概念:给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移 动者判负。事实上,这个游戏可以认为是所有Impartial Combinatorial Games的抽象模型。也就是说,任何一个ICG都可以通过把每个局面看成一个顶点,对每个局面和它的子局面连一条有向边来抽象成这个“有向图游戏”。下 面我们就在有向无环图原创 2017-10-13 21:37:48 · 313 阅读 · 0 评论 -
Vision_数据结构_并查集
///定义:/* 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。 集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组的元素所在的集合合并。*////代码:/***name:并查集**function:合并查找分类(连通分量的个数)*/#includeu原创 2017-10-16 12:38:29 · 310 阅读 · 0 评论 -
Vision_MATH_(扩展)欧几里得
///定义:/* 扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足贝祖等式: ax+by = gcd(a, b) =d(解一定存在,根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及方程组中。*////代码:/***name:欧几里得算法(辗转相除法)**functuion:求gcd(a,b)*/int gcd(int a,int原创 2017-10-16 13:18:54 · 276 阅读 · 0 评论 -
Vision_MATH_逆元
///定义:/* 逆元素是指一个可以取消另一给定元素运算的元素,在数学里,逆元素广义化了加法中的加法逆元和乘法中的倒数。在这里指的是模数运算中的逆元即:a/b%c=a*(b的逆元)%c*////代码:/***name:扩展欧几里得求逆元**function:求逆元**输入参数:a**输出参数:a的逆元**推导过程:a*x ≡ 1 (mod p),其中x就是原创 2017-10-19 14:08:33 · 300 阅读 · 0 评论 -
Vision_MATH_快速幂||矩阵快速幂
///定义:/* 快速幂就是快速算底数的n次幂。其时间复杂度为 O(logN), 与朴素的O(N)相比效率有了极大的提高。 也就是求A^B%mod的值,其中A可以是数字也可以是矩阵(矩阵快速幂)*////代码:/***name:快速幂**function:求解a^b%mod的值(mod*mod不会爆long long的情况)**输入参数:a,b,m原创 2017-10-19 13:44:45 · 355 阅读 · 0 评论 -
Vision_字符串_字符串哈希(BKDR Hash)
///定义:/* 将一个字符串哈希成一个数值,使得这些数值的冲突尽量的小。 最直白的是sum = s[0] + s[1] + ... + s[len],其中sum就是s的哈希值。*////代码:/***name:BKDR Hash**来源:官方模板*/unsigned int BKDRHash(char *str){ unsigned i原创 2017-10-10 11:01:41 · 475 阅读 · 0 评论 -
Vision_字符串_AC自动机
///定义:/* (1)AC自动机简介: 首先简要介绍一下AC自动机:Aho-Corasick automation, 该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。 一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章, 让你找出有多少个单词在文章里出现过。要搞懂AC自动机,先得有字 典树Trie和K原创 2017-10-07 12:40:03 · 508 阅读 · 0 评论 -
STL_string
定义:字符串是程序中经常要表达和处理的数据,我们通常是采用字符数组或字符指针表示字符串。STL为我们提供了另一种使用起来更为便捷的字符串的表达方式:string。string类的定义在头文件string>中。string类其实可以看作是一个字符的vector,vector上的各种操作都可以适用于string,另外,string类对对象还支持字符串的拼合、转换等操作。 代原创 2017-09-29 14:38:08 · 245 阅读 · 0 评论 -
STL_queue
///定义:/* (1)普通队列:普通的先进先出的容器 (2)双端队列:能够在队列的双向端口操作 (3)优先队列:在队列中能过自动按给定的优先级进行排序*////代码:/***name:queue(普通队列)**function:先进先出存储操作数据*/#include#includeusing namespace std;int m原创 2017-09-29 15:50:35 · 295 阅读 · 0 评论 -
STL_stack
///定义:/* stack模版类的定义在头文件中。 stack模版类需要两个模版参数,一个是元素类型, 另一个是容器类型,但是只有元素类型是必要的, 在不指定容器类型时,默认容器的类型为deque。*////代码:/***name:stack**function:后进先出的容器*/#include #inclu原创 2017-09-30 16:05:02 · 201 阅读 · 0 评论 -
STL_map
///定义:/* 在STL的头文件中中定义了模版类map和multimap, 用有序二叉树表存储类型为pair的元素对序列。 序列中的元素以const Key部分作为标识,map中所有元素的Key值必须是唯一的, multimap则允许有重复的Key值。可以将map看作是由Key标识元素的元素集合, 这类容器也被称为“关联容器”,可以通原创 2017-09-30 16:21:13 · 252 阅读 · 0 评论 -
STL_set
///定义:/* (1)set不可重复集合 (2)multiset可重复集合*////代码:/***name:set**function:结合操作*/#include #include using namespace std;int main(){ sets; s.begin() // 返回指向第一个元素的迭原创 2017-09-30 16:29:54 · 255 阅读 · 0 评论 -
STL_pair
///定义:/* STL的头文件中描述了一个看上去非常简单的模版类pair, 用来表示一个二元组或元素对,并提供了按照字典序对元素对进行大小比较运算符模版函数。*////代码:/***name:pair**function:处理二元组*/#include #include using namespace std;int main()原创 2017-09-30 16:38:59 · 268 阅读 · 0 评论 -
STL_vector
///定义:/* 在STL的头文件中定义了vector(向量容器模版类),vector容器以连续数组的方式存储元素序列,可以将vector看作是以顺序结构实现的线性表。当我们在程序中需要使用动态数组时,vector将会是理想的选择,vector可以在使用过程中动态地增长存储空间。vector模版类需要两个模版参数,第一个参数是存储元素的数据类型,第二个参数是存储分原创 2017-09-30 16:47:58 · 265 阅读 · 0 评论 -
Vision_数据结构_RMQ
///定义:/* RMQ算法,是一个快速求区间最值的离线算法, 预处理时间复杂度O(n*log(n)),查询O(1),所以是一个很快速的算法, 当然这个问题用线段树同样能够解决。*////代码:/***name:RMQ**function:求区间最值**输入参数:区间左右边界**输出参数:返回最值**复杂度:O(n*原创 2017-10-02 11:21:50 · 253 阅读 · 0 评论 -
Vision_字符串_KMP
///定义:/* KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和 V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP 算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹 配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含原创 2017-10-10 10:21:21 · 281 阅读 · 0 评论 -
Vision_MATH_中国剩余定理
///定义:/* 中国剩余定理给出了以下的一元线性同余方程组: x ≡ a1 (mod m1) x ≡ a2 (mod m2) x ≡ a3 (mod m3) x ≡ a4 (mod m4) * * * x ≡ ak (mod mk)*////代码:/***n原创 2017-10-17 14:02:02 · 354 阅读 · 0 评论