摘要: 差分数组差分数组就是原数组对应项和它前面那项的差值 。来看一个例子:原数组 a:5,8,4,3,15差分数组 b:5,3,-4,-1,12还是先来看例子:原数组:a:5,8,4,3,15它的前缀和数组:c:5,13,17,20,35它的差分数组:b:5,3,4,1,12它的差分前缀和(就是差分数组的 阅读全文
posted @ 2022-03-06 22:25 心悟&&星际 阅读(121) 评论(1) 推荐(0)
摘要: 前缀和是一种重要的预处理,能大大降低查询的时间复杂度。最简单的一道题就是给定 n 个数和 m 次询问,每次询问一段区间的和。求一个 O(n + m) 的做法。用 O(n) 前缀和预处理,O(m) 询问。一、一维前缀和主要代码 for(int i = 1; i <= n; ++i) sum[i] = 阅读全文
posted @ 2022-03-06 21:40 心悟&&星际 阅读(67) 评论(0) 推荐(0)
摘要: 栈的应用当读到的数时入栈,当读到运算符时,对应数据出栈,计算后再入栈,当读到@时,栈顶为本题的解,这里的栈用C++stl的stack容器,简化代码的实现。 //P1449 后缀表达式 #include<iostream> #include<stack> #include<cstring> using 阅读全文
posted @ 2022-03-06 21:21 心悟&&星际 阅读(48) 评论(0) 推荐(0)
摘要: 穷举法,或称为暴力破解法,其基本思路是:对于要解决的问题,列举出它的所有可能的情况,逐个判断有哪些是符合问题所要求的条件,从而得到问题的解。它也常用于对于密码的破译,即将密码进行逐个推算直到找出真正的密码为止。例如一个已知是四位并且全部由数字组成的密码,其可能共有10000种组合,因此最多尝试100 阅读全文
posted @ 2022-03-06 21:03 心悟&&星际 阅读(490) 评论(0) 推荐(0)
摘要: 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或 阅读全文
posted @ 2022-03-06 20:57 心悟&&星际 阅读(588) 评论(0) 推荐(0)
摘要: KMP算法是一种字符串模式匹配算法。什么是字符串的模式匹配?给定两个串S=“s1s2s3 …sm”和T=“t1t2t3 …tn”,在主串S中寻找子串T的过程叫做模式匹配,T称为模式。暴力匹配(朴素模式匹配BF)规定i是主串S的下标,j是模式T的下标。现在假设现在主串S匹配到 i 位置,模式串T匹配到 阅读全文
posted @ 2022-03-06 20:42 心悟&&星际 阅读(44) 评论(0) 推荐(0)
摘要: 一、整除1.设a、b是给定的数, b ≠ 0 ,若存在整数c,使得a=bc,则称b整除a,记作b ∣ a ,反之则称b不能整除a,记作b ∤ a。2.一些性质:a. 若 a|b,且 b|c,则 a|c。b. 若 b|a,且 b|c,则b∣(a±c)c.若 c|a,且 c|b,则对于任意整数m、n,有 阅读全文
posted @ 2022-03-06 20:26 心悟&&星际 阅读(233) 评论(0) 推荐(0)
摘要: gcd指的是greatest common divisor就是最大公约数。lcm指的是Least Common Multiple,即最小公倍数。一、最大公约数最大公约数是数论中一个重要的概念设a、b不全为零,同时整除a、b的整数称为他们的公约数,显然a、b的公约数只有有限多个,我们将其中最大的一个称 阅读全文
posted @ 2022-03-06 20:19 心悟&&星际 阅读(411) 评论(0) 推荐(0)
摘要: 定义:在数论,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目(因此φ(1)=1)。此函数以其首名研究者欧拉命名(Euler’s totient function),它又称为Euler’s totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和 阅读全文
posted @ 2022-03-06 20:02 心悟&&星际 阅读(214) 评论(0) 推荐(0)
摘要: 算术基本定理可表述为:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积 ,这里P1<P2<P3......<Pn均为质数,其中指数ai是正整数。这样的分解称为 N 的标准分解式。质因子分解代码 #include<iostream> using namespace st 阅读全文
posted @ 2022-03-06 18:53 心悟&&星际 阅读(303) 评论(0) 推荐(0)
摘要: 质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。任意大于等于5的素数都与6的倍数相邻。如果n是一个合数,那么n一定有一个不超过sqrt(n)的素因子。判断一个数是否是 阅读全文
posted @ 2022-03-06 18:36 心悟&&星际 阅读(628) 评论(0) 推荐(0)
摘要: P1621 集合 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<cstdlib> #include<cmath> #define maxn 100010 using namespa 阅读全文
posted @ 2022-03-06 18:19 心悟&&星际 阅读(40) 评论(0) 推荐(0)
摘要: P3367 【模板】并查集 #include<iostream> #include<algorithm> using namespace std; const int maxm=10010; int pre[maxm]; int n,m; void make()//初始化 { for (int i= 阅读全文
posted @ 2022-03-06 18:08 心悟&&星际 阅读(37) 评论(0) 推荐(0)
摘要: P1551 亲戚这里给出一个深度优先遍历的算法。O(n)的预处理,每个回答O(1)。 #include<iostream> #include<vector> using namespace std; vector <int> g[5001]; int d[5001]; int cnt=1; void 阅读全文
posted @ 2022-03-06 16:44 心悟&&星际 阅读(22) 评论(0) 推荐(0)
摘要: P1551 亲戚是一题经典的并查集的应用,有亲戚关系的为一个集合。 #include<iostream> using namespace std; const int maxn=5010; int pre[5010]; int n,m,p; void make()//初始化 { for (int i 阅读全文
posted @ 2022-03-06 16:36 心悟&&星际 阅读(35) 评论(0) 推荐(0)
摘要: 并查集(Disjoint-Set)是一种可以动态维护若干个不重叠的集合,并支持合并与查询的数据结构。详细地说,并查集包括如下两个基本操作:1.Get,查询一个元素属于哪一个集合。2.Merge,把两个集合合并成一个大集合。为了具体实现并查集这种数据结构,我们首先需要定义集合的表示方法。在并查集中,我 阅读全文
posted @ 2022-03-06 16:29 心悟&&星际 阅读(146) 评论(0) 推荐(0)
摘要: 排列的概念排列,一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列(permutation)。特别地,当m=n时,这个排列被称作全排列(all permutation)。排列数p(n,r)=n!/(n-r)!,p(n,n)=n!,0!=1从 阅读全文
posted @ 2022-03-06 08:08 心悟&&星际 阅读(162) 评论(0) 推荐(0)
摘要: 加法原理设事件A有m种产生方式,事件B有n种产生方式,当事件A与事件B产生方式不重叠时,事件A或事件B的产生方式有m+n种。用集合方法描述这个问题可以这样说: 乘法原理 设事件A有m种产生方式,事件B有n种产生方式,当事件A与事件B产生方式彼此独立,事件A与事件B的产生方式有mn种。用集合方法描述这 阅读全文
posted @ 2022-03-06 07:54 心悟&&星际 阅读(228) 评论(0) 推荐(0)