摘要:
处理何种问题:用于求解[1,n]中有多少个数与n互质的个数。 性能:单次查询时间复杂度为,打表的话有一个线性筛,时间复杂度为O(n)。 原理: 可以先在1到n-1中找到与n不互质的数,然后把他们减掉 比如φ(12) 把12质因数分解,12=2*2*3,其实就是得到了2和3两个质因数 然后把2的倍数和 阅读全文
摘要:
处理何种问题:求解无向连通图的最小生成树,适合于稠密图,即点少边多的无向图。 性能:时间复杂度为 O(v * loge),v为点的个数,e为边的个数 原理:贪心策略。 实现步骤:正向模拟找连接点。即取任意一点,放入集合,找此点集合内最短的边且边的另一端点不在该集合内的点,将改点放入点集合内,重复此操 阅读全文
摘要:
处理何种问题:求解母串中,是否有模式串/有多少模式串/模式串的位置。 性能:时间复杂度O(T_len+S_len) 原理:通过Next数组来优化的,具体证明过程不知让我丢哪去了,具体证明会形成一个环。 实现步骤:略 备注:ios::sync_with_stdio(false); 有时可以加速cin的 阅读全文
摘要:
处理何种问题:求解最小生成树,适合点多边少的无向图。(以证明,放心用) 性能:时间复杂度为O(e*loge),e为边的个数。 原理:贪心策略 实现步骤: <1>设一个有n个顶点的联通网络为G(V,E),最初先构造一个只有n个顶点,没有边的非连通图T={V,空},图中的每一个顶点自成一个连通分量。 < 阅读全文
摘要:
以前一直不明白为什么有些博客上的代码有文件输入输出,复制粘贴不行吗,现在才知道原来Linux系统,不支持复制粘贴,还有就是人机交互确实不怎么样,用户体验没windows好。为了比赛,还是要学习一下文件的输入输出。 阅读全文
摘要:
处理何种问题:就我目前对于并查集的理解来说,并查集是一种很巧妙的数据结构,他可以将根据集合内各个元素之间的关系将其划分为几个不同类别。 性能:目前还没有直观感受,时间复杂度主要看测试数据的复杂程度。 原理:数据结构 实现步骤:while(root!=pre[root]) root=pre[root] 阅读全文
摘要:
处理何种问题:虽说是排序,但是主要作用是判断有向图是否有环。 性能:时间复杂度为O(E),E为边的个数。 原理:每次找入度为0的点入栈,然后将与此相连的节点入度减1;重复以上步骤,直到栈中为空。记录弹出节点次数,如果次数与节点总数相同,及无环,否则,有环的存在。(证明的时候注意,如果一个点的入度已变 阅读全文
摘要:
处理何种问题:与康托展开恰恰相反,及已知元素个数和所要求的名次,可以输出该名次的排列方式。 性能:时间复杂度为 O(len^2),len 为字符串长度 原理:略 实现步骤:略 备注:名次从1开始,名次不再范围内的话会出现乱码 输入样例解释: 5 //元素个数 2 //字典序名称 输出样例解释: 1 阅读全文
摘要:
处理何种问题:在处理 a^b mod c 的问题中,如果遇到b的值极大,大到只能用字符串来存取时,普通的快速幂已经无法处理该问题时,就该用到欧拉降幂来处理了。 性能:可以将时间复杂度降至快速幂的水平。 原理: a^b mod c == a^(b mod phi(c)+phi(c)) mod c (P 阅读全文
摘要:
处理何种问题:数组单点更新,单点查询,区间更新,区间求和,区间求最值。 性能:时间复杂度为O(logn) 原理:区间跟新的懒惰标记了解一下,其余略 实现步骤:略 备注:在线段树里,单点更新与单点累加和树状数组上的单点跟新有区别,树状数组还需与原数组求差值,线段树不用。 线段树的区间求最值差别不大,在 阅读全文