![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM知识点
Healer66
他是谁啊?他究竟是什么身份啊?
展开
-
曼哈顿距离最小生成树(树状数组)
转自:https://www.cnblogs.com/Anding-16/p/7367845.htmlPOJ-3241 Object ClusteringDscriptionWe have N (N ≤ 10000) objects, and wish to classify them into several groups by judgement of their resembla...转载 2018-10-14 20:36:04 · 1139 阅读 · 0 评论 -
数据离散化
离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。这是百度百科上的定义。那么举个栗子,某个题目告诉你有1e5个数,每个数大小不超过1e9,要你对这些数进行操作(比如并查集之类的)。那么肯定不能直接开1e9大小的数组,但是1e5的范围就完全没问题。在举个栗子,现在对{4,7,6,9}进行离散化,那么得到的结果是{1,3,2,4},也就是说,当我们并不需要这些数据具体是多少...转载 2018-10-14 15:52:57 · 286 阅读 · 0 评论 -
编辑距离算法详解:Levenshtein Distance算法
转自:https://www.cnblogs.com/sumuncle/p/5632032.html编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 算法基本原理:假设我们可以使用d[ i , j ]个步骤(可以使用一个二维...转载 2018-10-08 09:22:57 · 572 阅读 · 0 评论 -
树状数组
关于树状数组的推荐博客:https://blog.csdn.net/flushhip/article/details/79165701 https://blog.csdn.net/Small_Orange_glory/article/details/81290634#include<bits/stdc++.h>#define MAXN 9999using namesp...原创 2018-10-14 11:37:06 · 132 阅读 · 0 评论 -
K-D树
K-D树,即K-Dimensional Tree,是一种高维索引树型数据结构。常用于大规模高维数据空间的最邻近或者K邻近查找,例如图像检索中高维图像特征向量的K邻近匹配,对KNN算法的优化等。 Contents 1. K-D树的基本原理 2. K-D树的改进(BBF算法) 3. K-D树的C++实现 4. K-D树的开源框架介绍 1....转载 2018-10-06 18:34:02 · 1517 阅读 · 0 评论 -
莫队算法
转自:https://www.cnblogs.com/hzf-sbit/p/4056874.html问题:有n个数组成一个序列,有m个形如询问L, R的询问,每次询问需要回答区间内至少出现2次的数有哪些。 朴素的解法需要读取O(nm)次数。如果数据范围小,可以用数组,时间复杂度为O(nm)。如果使用STL的Map来保存出现的次数,则需要O(nmlogn)的复杂度。有没有更快的方法呢?...转载 2018-10-13 11:28:02 · 128 阅读 · 0 评论 -
扩展KMP算法
转自:https://www.cnblogs.com/dilthey/p/8620119.html扩展KMP解决的问题:定义母串S和子串T,S的长度为n,T的长度为m;求 字符串T 与 字符串S的每一个后缀 的最长公共前缀;也就是说,设有extend数组:extend[i]表示T与S[i,n-1]的最长公共前缀,要求出所有extend[i](0<=i<n)。...转载 2018-10-13 09:22:57 · 505 阅读 · 0 评论 -
最长公共子序列
一些概念:(1)子序列: 一个序列A = a1,a2,……an,中任意删除若干项,剩余的序列叫做A的一个子序列。也可以认为是从序列A按原顺序保留任意若干项得到的序列。例如: 对序列 1,3,5,4,2,6,8,7来说,序列3,4,8,7 是它的一个子序列。对于一个长度为n的序列,它一共有2^n 个子序列,有(2^n – 1)个非空子序列。请注意:子序列不是子集,它和原始序列...转载 2018-09-27 21:06:40 · 412 阅读 · 0 评论 -
FFT与多项式乘法
转自:https://blog.csdn.net/leo_h1104/article/details/51615710基本概念1.多项式的两种表示法系数表示法:即平时看到的多项式:Σi=0~n-1 a[i]*(x^i)点值表示法:一个最高次为n-1次的多项式f(x),可以表示为n个其图像上点(x,y),例如2x^2+3x+1可以表示为(0,1) (1,6) (2,15)两种...转载 2018-10-04 18:50:31 · 806 阅读 · 0 评论 -
Tarjan离线算法求最近公共祖先(LCA)
转自:https://blog.csdn.net/csyzcyj/article/details/10051173arjan离线算法求LCA介绍 前言:首先,本人搞懂Tarjan求最近公共祖先(LCA),也是浏览了大量其他网友大牛的文章,若是看了本文仍未弄懂的,可以尝试自己做一下模板题(裸题)HDU2586,自己用数据去感受一下,或者可以换篇文章再看,或许他的文章更对你的“胃口...转载 2018-10-02 20:14:20 · 394 阅读 · 0 评论 -
基姆拉尔森计算公式 推导
转自:https://www.cnblogs.com/SeekHit/p/7498408.html需求:给定一个xxxx-xx-xx日期,计算为星期几。设定int y; //年int m; //月int d; //日int w; //周几从 公元0年1月1日星期日 开始推导对于第一个月 w = (d-1) % 7 --------- 公...转载 2018-10-10 18:56:13 · 1477 阅读 · 3 评论 -
次短路与k短路
次短路与第K短路次短路是除了最短路之外第二短的路,这条路的长度有可能和最短路一样长。第K短路就是第K短的路,鉴于这两个算法都是特别模板的题,直接上例子HRBUST 1050 Hot Pursuit II求次短路:Dijkstra的dist数组和vis数组再加一维,松弛的时候讨论当前的路小于最短路,或者大于最短路但小于次短路这两种情况,就能维护一个次短路了#include <...转载 2018-10-10 20:44:54 · 273 阅读 · 0 评论 -
ACM---差分
差分就是将数列中的每一项分别与前一项数做差,例如:一个序列1 2 5 4 7 3,差分后得到1 1 3 -1 3 -4 -3这里注意得到的差分序列第一个数和原来的第一个数一样(相当于第一个数减0)差分序列最后比原序列多一个数(相当于0减最后一个数)性质:1、差分序列求前缀和可得原序列2、将原序列区间[L,R]中的元素全部+1,可以转化操作为差分序列L处+1,R+1处-1...原创 2019-02-13 19:25:19 · 8258 阅读 · 2 评论 -
组合数取模方法总结(Lucas定理介绍)
转自:https://www.cnblogs.com/fzl194/p/9095177.html1.当n,m都很小的时候可以利用杨辉三角直接求。 C(n,m)=C(n-1,m)+C(n-1,m-1); 2、n和m较大,但是p为素数的时候Lucas定理是用来求 c(n,m) mod p,p为素数的值。C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p 也就...转载 2019-02-02 22:42:17 · 623 阅读 · 0 评论 -
字符串的最小表示法/最大表示法 O(n)
循环字符串的最小表示法的问题可以这样描述:对于一个字符串S,求S的循环的同构字符串S’中字典序最小的一个。由于语言能力有限,还是用实际例子来解释比较容易:设S=bcad,且S’是S的循环同构的串。S’可以是bcad或者cadb,adbc,dbca。而且最小表示的S’是adbc。对于字符串循环同构的最小表示法,其问题实质是求S串的一个位置,从这个位置开始循环输出S,得到的S’字典序最小。...转载 2019-02-02 20:43:30 · 268 阅读 · 0 评论 -
邻位对换实现全排列
转自:https://blog.csdn.net/sm9sun/article/details/77373258是由Johnson-Trotter首先提出。如果已知n-1个元素的排列,将n插入到排列的不同位置,就得到了n个元素的排列。用这种方法可以产生出任意n个元素的排列。但是,为了产生n个元素的排列,我们必须知道并存储所有n-1个元素的排列,然后才能产生出所有n阶排列,这是一个很大的缺点。...转载 2019-01-31 19:49:46 · 627 阅读 · 0 评论 -
RMQ算法
转自:https://blog.csdn.net/qq_31759205/article/details/75008659RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干次询问RMQ(i,j),返回数列A中下标在区间[i,j]中的最小/大值。本文介绍一种比较高效的ST算法解决这个问题。ST(Sparse Ta...转载 2019-01-26 11:30:02 · 161 阅读 · 0 评论 -
常用排序算法
http://www.cnblogs.com/eniac12/p/5329396.html转载 2018-11-26 20:56:35 · 117 阅读 · 0 评论 -
ACM—启发式搜索
https://www.cnblogs.com/yanlingyin/archive/2012/01/15/2322640.html开篇这篇文章介绍找最短路径的一种算法,它的字我比较喜欢:启发式搜索。对于入门的好文章不多,而这篇文章就是为初学者而写的,很适合入门的一篇。文章定位:非专业性A*文章,很适合入门。有图有真相,先给大家看个效果图吧:从图的左下角到右上角寻找最短路径,灰色部...转载 2018-11-02 18:14:17 · 405 阅读 · 0 评论 -
ACM----几何---凸包
推荐:http://www.cnblogs.com/Booble/archive/2011/02/28/1967179.html凸包(Convex Hull)是一个计算几何(图形学)中的概念。在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。X的凸包可以用X内所有点(X1,...Xn)的线性组合来构造.在二维欧几里得空间中,凸包可想象为一条刚好包著...原创 2018-11-03 17:51:23 · 482 阅读 · 0 评论 -
计算几何基础——点积和叉积
计算几何是算法竞赛的一大块,而叉积是计算机和的基础。首先叉积是计算说向量之间的叉积,那么我们可以这样定义向量,以及向量的运算符重载。struct Point{ double x,y; Point(double x=0,double y=0):x(x),y(y) {}};typedef Point Vector;Vector operator + (Vector A...转载 2018-11-03 12:22:36 · 797 阅读 · 0 评论 -
Manacher算法详解
转自:http://blog.csdn.net/dyx404514/article/details/42061017%20%20%20推荐:https://segmentfault.com/a/1190000008484167在介绍算法之前,首先介绍一下什么是回文串,所谓回文串,简单来说就是正着读和反着读都是一样的字符串,比如abba,noon等等,一个字符串的最长回文子串即为这个...原创 2018-10-11 07:54:13 · 231 阅读 · 0 评论 -
AC自动机算法详解
转自:http://www.cppblog.com/mythit/archive/2009/04/21/80633.html 首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。要搞懂AC自动机,先得有模式...转载 2018-10-02 10:47:40 · 770 阅读 · 0 评论 -
状压DP(涉及位运算)
转自:https://blog.csdn.net/forever_dreams/article/details/81074971【简介】状压DP是基于状态压缩的动态规划,又叫做集合动态规划。顾名思义,这是一类以集合为状态的特殊的动态规划问题。有些时候,需要被记录到得状态有很多,但是对每个状态都开一维来记录显然是行不通的,我们就考虑把这些状态压缩一下,通常情况下,若只有两种状态,我们...转载 2018-10-02 09:26:48 · 164 阅读 · 0 评论 -
ACM—DP—各种背包问题
转自:https://blog.csdn.net/u011439362/article/details/96121271.01背包 题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰...转载 2018-09-01 16:49:29 · 1341 阅读 · 1 评论 -
ACM—KMP
推荐博客:https://www.cnblogs.com/yjiyjige/p/3263858.htmlKMP模板:重要思想:利用已经部分匹配这个有效信息,保持i指针不回溯,通过修改j指针,让模式串尽量地移动到有效的位置//计算主串中有多少个重复子串#include <string.h>#include <stdio.h>#define Max ...原创 2018-09-01 16:34:03 · 475 阅读 · 0 评论 -
ACM—二分查找
在有序表中高效查找元素的常用方法是二分查找,所谓二分即是折半,遵循分治的思想,每次将元序列划分成数量相等的两个子序列,然后查找,最终定位到目标元素。以下是代码(假设data序列按递增序排列):int binary_search(int *data, int size, int value){ int mid; int left = 0; int right = ...原创 2018-09-01 15:55:18 · 591 阅读 · 0 评论 -
ACM—并查集
这个博客写的不错:https://blog.csdn.net/u013546077/article/details/64509038int pre[1000];int find(int x) //查找根节点{ int r=x; while ( pre[r] != r ) ...原创 2018-09-01 15:31:35 · 172 阅读 · 0 评论 -
ACM—欧拉函数(数论)
欧拉函数的定义: 在数论中,对于正整数N,少于或等于N ([1,N]),且与N互质的正整数(包括1)的个数,记作φ(n)。 φ函数的值: φ(x)=x(1-1/p(1))(1-1/p(2))(1-1/p(3))(1-1/p(4))…..(1-1/p(n)) 其中p(1),p(2)…p(n)为x的所有质因数;x是正整数; φ(1)=1(唯一和1互质的数,且小于等于...原创 2018-09-01 15:17:46 · 1006 阅读 · 0 评论 -
ACM—拓扑排序
转自:https://blog.csdn.net/qq_35644234/article/details/605781891、拓扑排序的介绍对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。 拓扑排序对应施工的流程图具有特别重要...转载 2018-09-01 14:22:12 · 487 阅读 · 0 评论 -
ACM—用数组模拟邻接表
转自:https://blog.csdn.net/major_zhang/article/details/52155279为了学最短路而补。用图的邻接矩阵存储法,它的空间和时间复杂度都是N2,现在我来介绍另外一种存储图的方法:邻接表,这样空间和时间复杂度就都是M。对于稀疏图来说,M要远远小于N2。先上数据,如下。4 5 1 4 9 4 3 8 1 2 5 ...转载 2018-08-31 09:26:23 · 462 阅读 · 0 评论 -
ACM—网络流初步
转自:https://blog.csdn.net/mystery_guest/article/details/51910913推荐:https://www.cnblogs.com/ZJUT-jiangnan/p/3632525.html本图示最大流的一个实例。由此,可以引出最大流的一些基本的定义和概念可以这样看,图就是一种管道,管道有最大通过流量的限制,图中边的权值就是所谓...转载 2018-08-27 11:05:24 · 396 阅读 · 0 评论 -
ACM—大整数
1.java天下第一转自:https://www.cnblogs.com/tsw123/p/4378697.htmlJAVA中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类这两个类都在java.math.*包中,因此每次必须在开头处引用该包(import java.math.*)。下面说说几个常用的用法1. int a=3; Big...转载 2018-08-27 10:06:14 · 414 阅读 · 0 评论 -
ACM—数论—费马大定理 (数学史上著名的定理)
百度词条费马大定理,又被称为“费马最后的定理”,由17世纪法国数学家皮耶·德·费玛提出。它断言当整数n >2时,关于x, y, z的方程 x^n + y^n = z^n 没有正整数解。德国佛尔夫斯克曾宣布以10万马克作为奖金奖给在他逝世后一百年内,第一个证明该定理的人,吸引了不少人尝试并递交他们的“证明”。被提出后,经历多人猜想辩证,历经三百多年的历史,最终在1995年被英国...原创 2018-08-27 09:36:50 · 2806 阅读 · 0 评论 -
ACM—三种最短路算法
1.炒鸡简单的floyd(弗洛伊德)算法求图中任意两点间的最短路径,三层循环,第一层枚举中间点,第二层枚举起点,第三层枚举终点。从小到大更新,发现更短路则立即更新。代码简单换来的是O(n^3)复杂度。对于数据量大的题并不合适。void floyd(int dis[][], int n){ for(int k = 0; k < n; ++k) for(...原创 2018-08-25 19:46:11 · 776 阅读 · 0 评论 -
ACM—炒鸡简单的字典树
字典树其实很简单啊。它就是一个存储了很多字符串的树。如下图:字典树 用这种结构存储字符串,不仅节省空间,而且方便增删和查找字符。一般来说,都是用某种结构体来封装字典树的。const int maxn = 26;struct Trie{ Trie *Next[maxn];//26个英文字母,所以一个节点有26个分叉 int Flag;// ...原创 2018-08-25 20:34:57 · 292 阅读 · 0 评论 -
最小生成树
扩展:最小生成树最小生成树的概念:在一副加权连通图中,最小生成树包含原图中的所有 n 个结点且权值和最小,并且有保持图连通的最少的边(说的就是不会成环)。解决最小生成树的算法:prime和kruskal算法prime算法: 先任意选择一条边(一般直接选择第一条),连接与其相连权值最小的点,然后两个点成为一个集合体。 找这个不在这个集合体里 但是与集合体相连的权值最小的点 与集合体相连,...原创 2018-09-23 13:44:00 · 236 阅读 · 0 评论 -
圆上三点求圆心和半径
给定三角形三个顶点的坐标,如何求三角形的外心的坐标呢?例如 :给定a(x1,y1) b(x2,y2) c(x3,y3)求外接圆心坐标O(x,y)1. 首先,外接圆的圆心是三角形三条边的垂直平分线的交点,我们根据圆心到顶点的距离相等,可以列出以下方程:(x1-x)*(x1-x)+(y1-y)*(y1-y)=(x2-x)*(x2-x)+(y2-y)*(y2-y);(x2-x)*(x2-x)...原创 2018-09-12 22:14:14 · 10346 阅读 · 0 评论 -
ACM—除法分块
for(LL l = 1,r;l <= n;l = r + 1){ r = n / (n / l); //向下取整的答案为 (n / l) //区间长度为(r - 1 +1) //这里操作 }LL get_sum(LL n){ LL ans = 0; for(LL l = 1,r;...转载 2018-09-09 19:21:09 · 782 阅读 · 0 评论 -
ACM—逆元
逆元(inv)1.什么是逆元当求解公式:(a/b)%m 时,因b可能会过大,会出现爆精度的情况,所以需变除法为乘法:设c是b的逆元,则有b*c≡1(mod m);则(a/b)%m = (a/b)*1%m = (a/b)*b*c%m = a*c(mod m);即a/b的模等于a*b的逆元的模;逆元就是这样应用的;2.如何计算费马小定理(假如p是质数,且gcd(a,p...原创 2018-09-09 16:52:14 · 359 阅读 · 0 评论