算法
Tang7O
博客已转个人网站,本博客停止更新。
展开
-
求一个数所有的因子个数和因子和
B站学习视频(图片来源)1.所有因子个数如果一个数是因数,就不断除这个数,保存这个因子次方的数 temp++;运用所有因子个数...转载 2020-02-04 14:07:35 · 3763 阅读 · 0 评论 -
求三角形外心坐标
给定三角形三个顶点的坐标,如何求三角形的外心的坐标呢?例如 :给定a(x1,y1) b(x2,y2) c(x3,y3)求外接圆心坐标O(x,y)首先,外接圆的圆心是三角形三条边的垂直平分线的交点,我们根据圆心到顶点的距离相等,可以列出以下方程:(x1-x)(x1-x)-(y1-y)(y1-y)=(x2-x)(x2-x)+(y2-y)(y2-y);(x2-x)(x2-x)+(y2-y)(y...原创 2020-01-19 13:11:54 · 2497 阅读 · 0 评论 -
distinct-subsequences 求S有多少个不同的子串与T相同
Given a string S and a string T, count the number of distinct subsequences ofT inS.A subsequence of a string is a new string which is formed from the original string by dele...原创 2020-01-19 13:06:49 · 315 阅读 · 0 评论 -
四点是否为正方形
double Distance(int x1,int y1,int x2,int y2){//求边长 return sqrt(pow((x1-x2),2)+pow((y1-y2),2));}bool IsRightAngle(int x1,int y1,int x2,int y2,int x3,int y3){//判断是否为直角 if((x2-x1)*(x3-x1)+(y2-y...原创 2019-11-05 19:50:54 · 133 阅读 · 0 评论 -
区间DP
区间dp就是在区间上进行动态规划,求解一段区间上的最优解。主要是通过合并小区间的 最优解进而得出整个大区间上最优解的dp算法。核心思路:既然让我求解在一个区间上的最优解,那么我把这个区间分割成一个个小区间,求解每个小区间的最优解,再合并小区间得到大区间即可。所以在代码实现上,我可以枚举区间长度len为每次分割成的小区间长度(由短到长不断合并),内层枚举该长度下可以的起点,自然终点也就明了了。然...原创 2019-10-16 20:13:38 · 111 阅读 · 0 评论 -
扫描线
题意:二维平面有n个平行于坐标轴的矩形,现在要求出这些矩形的总面积. 重叠部分只能算一次.分析:线段树的典型扫描线用法.首先假设有下图两个矩阵,我们如果用扫描线的方法如何计算它们的总面积呢?首先我们将矩形的上下边分为上位边(即y坐标大的那条平行于x轴的边),和下位边(y坐标小的平行于x轴的边).然后我们把所有矩形的上下位边按照他们y坐标从小到大排序,可以得到4条扫描线:又因为上面2...原创 2019-10-16 19:08:29 · 128 阅读 · 0 评论 -
线段树
线段树将区间分为若干个子区间,子区间又继续分,直到区间为一个点(l==r)对于父区间 [l,r] ,其子区间为 [l,(l+r)/2] 和 [(l+r)/2+1,r]线段树一般用于求区间的值,如区间最值,区间求和等。代码实现中, 假设节点下标从1开始,若某节点下标为x,那么其左子区间下标为2x,右子区间下标为2x+1,父节点下标为x/2;常用宏定义#define Mid ((l+r)&...原创 2019-10-16 18:27:15 · 95 阅读 · 0 评论 -
双向队列的简单讲解
参考:https://blog.csdn.net/dengjin20104042056/article/details/54143585双向队列和向量很相似,但是它允许在容器头部快速插入和删除(就像在尾部一样)。双向都可以进行相应的操作。Constructors创建一个新双向队列Operators比较和赋值双向队列assign()//设置双向队列的值at()...原创 2019-03-14 19:11:14 · 15028 阅读 · 0 评论 -
栈的简单讲解
栈stack的特征:后进先出C++队列queue类成员函数如下:push(): 向栈内压入一个成员;pop(): 从栈顶弹出一个成员;empty(): 如果栈为空返回true,否则返回false;top(): 返回栈顶,但不删除成员;size(): 返回栈内元素的大小;可以把栈想象成一个木桶,后放进去的东西先拿出来;下面举个栗子:括号配对问题Description现在有一...原创 2019-03-12 22:43:19 · 189 阅读 · 0 评论 -
GCD
GCD原理:a=b*q+r1; (a,b)==(b1,r1) )( (a,b)为a,b的最小公约数)代码如下:int gcd(int a,int b){ if(b==0) return a; gcd(b,a%b);}原创 2018-11-22 14:07:37 · 107 阅读 · 0 评论 -
快速乘与快速幂
快速乘:(a*b)%c原理:将b转化为二进制的形式 用b每一位的权重乘a再相加举个例子:20* 10=20*(1010)2=(20*(2^3)*1) + (20 *(2^2)*0) + (20 *(2^1)*1) + (20 *(2^0)*0)=160+40=200代码如下:int fast_mul(int a,int b,int c){ int ans=0; while(b) ...原创 2018-11-22 13:59:42 · 103 阅读 · 0 评论 -
整体二分(poj 2104)
所谓整体二分,需要数据结构题满足以下性质:询问的答案具有可二分性修改对判定答案的贡献相对独立,修改之间互不影响效果修改如果对判定答案有贡献,则贡献为一确定的与判定标准无关的值贡献满足交换律,结合律,具有可加性题目允许离线操作不妨先来考虑下一个简单易懂的????(????????????????????)的排序算法(????为数值范围)这个方法是自己在思考整体二分的时候????????的 虽然在实际应用上没什么意义 但是有助于理解整体...原创 2019-10-01 17:26:15 · 169 阅读 · 0 评论 -
扩展KMP
摘自 拓展kmp算法总结1、扩展KMP是什么?解决何种问题?与KMP算法的异同?拓展kmp是对KMP算法的扩展,它解决如下...转载 2019-10-02 11:01:34 · 1732 阅读 · 1 评论 -
优先队列简单讲解
优先队列就是会自动排序的队列;头文件#include ;声明格式为:priority_queue ans;//声明一个名为ans的整形的优先队列基本操作有:empty( ) //判断一个队列是否为空pop( ) //删除队顶元素top( ) //返回优先队列的队顶元素push( ) //加入一个元素size( ) //返回优先队列中的元素个数默认的优先队列优先级高的...原创 2019-03-14 16:49:45 · 305 阅读 · 0 评论 -
队列的简单讲解
队列queue的特征:先进先出C++队列queue类成员函数如下:back()返回最后一个元素empty()如果队列空则返回真front()返回第一个元素pop()删除第一个元素push()在末尾加入一个元素size()返回队列中元素的个数下面举个栗子约瑟夫环(栈和队列)Description题目:n个数字(1,2,3…,n)形成一个圆圈,从数字1开始,每次从这个圆圈中删除第...原创 2019-03-12 20:51:30 · 152 阅读 · 0 评论 -
广度/深度优先搜索
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css"> <div class="htmledit_views" id="content_views">1....转载 2019-03-19 19:40:20 · 178 阅读 · 0 评论 -
斯特林公式
斯特林公式是一条用来取n阶乘近似值的数学公式。一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特灵公式十分好用。斯特林公式可以用来估算某数的大小,结合lg可以估算某数的位数,或者可以估算某数的阶乘是另一个数的倍数。Stirling公式的意义在于:当n足够大时,n!计算起来十分困难,虽然有很多关于n!的等式,但并不能很好地对阶乘结果进行估计,尤其是n很大之后,误差将会非常大。但利用Sti...转载 2019-08-15 11:10:44 · 722 阅读 · 0 评论 -
卡特兰数
一、关于卡特兰数卡特兰数是一种经典的组合数,经常出现在各种计算中,其前几项为 : 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91...转载 2019-08-15 10:57:34 · 8678 阅读 · 1 评论 -
康托展开和逆康托展开
简述康托展开是一个全排列到一个自然数的双射,常用于构建hash表时的空间压缩。设有n个数(1,2,3,4,…,n),可以有组成不同(n!种)的排列组合,康托展开表示的就是是当前排列组合在n个不同元素的全排列中的名次。原理X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-...转载 2019-08-15 11:01:53 · 117 阅读 · 0 评论 -
母函数
普通母函数:在用到母函数之前啊,恐怕很少有人听过母函数,我也一样,我当时是做杭电acm的2082题要用母函数做才去了解母函数的。当然母函数分为很多种,包括普通母函数、指数母函数、L级数、贝尔级数和狄利克雷级数,我这里说的都是普通母函数。什么是普通母函数呢,——把组合问题的加法法则和幂级数的的乘幂的相加对应...转载 2019-08-15 10:49:35 · 311 阅读 · 0 评论 -
欧拉函数线性筛
参考博客:https://blog.csdn.net/HandsomeHow/article/details/51325463定义:欧拉函数是小于n的数中与n互质的数的数目。例如φ(8)=4,因为1,3,5,7均和8互质。欧拉函数的通式为φ(x)=x (1-1/p1)(1-1/p2)…(1-1/pk):,其中pi表示x的质因数。特别声明,φ(1)=1。注意:每种质因数只一个。比如12=223...原创 2019-08-15 10:45:07 · 150 阅读 · 0 评论 -
组合游戏 - SG函数和SG定理
在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧.必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败。 N点...转载 2019-08-15 10:25:37 · 116 阅读 · 0 评论 -
逆元
由于C++储存数据的范围是有限的,当数据超出储存范围时计算就会出错,为了避免错误,一般使用求余的方法。(a+b)%c可以表示为(a%c+b%c)%c,乘法同理减法也可以表示为(a+c-b)%c。但是除法怎么办呢?想一下除法计算过程:a/b=a* 1/b那么自然会想到,把(a/b)%c变成(a*(1/b))不就可以了吗。但是现实是残酷的,取余是建立在除数和被除数都算整数的基础上的,浮点数无...原创 2019-08-15 10:20:29 · 103 阅读 · 0 评论 -
RMQ算法详解(在线ST)
1. 概述RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间的最小/大值。这两个问题是在实际应用中经常遇到的问题,下面介绍一下解决这两种问题的比较高效的算法。当然,该问题也可以用线段树(也叫区间树)解决,算法复杂度为:O(N)~O(logN...转载 2019-06-13 19:44:22 · 206 阅读 · 0 评论 -
最小生成树(prime算法、kruskal算法) 最短路径算法(Floyd,bellmen-ford,dijkstra,Spfa)
文章目录最小生成树的概念例题Prime算法Kruskal算法最小生成树的概念生成树的概念:联通图G的一个子图如果是一棵包含G的所有顶点的树,则该子图称为G的生成树 生成树是联通图的极小连通子图。所谓极小是指:若在树中任意增加一条边,则 将出现一个回路;若去掉一条边,将会使之编程非连通图。生成树各边的权 值总和称为生成素的权。权最小的生成树称为最小生成树,常用的算法有prime算法和kruska...原创 2019-04-22 19:48:16 · 841 阅读 · 0 评论 -
并查集详解(超级简单有趣~~)
故事读完,并查集就会了~~~~~江湖上散落着各式各样的大侠,有上千个之多。他们没有什么正当职业,整天背着剑在外面走来走去,碰到和自己不是一路人的,就免不了要打一架。但大侠们有一个优点就是讲义气,绝对不打自己的朋友。而且他们信奉“朋友的朋友就是我的朋友”,只要是能通过朋友关系串联起来的,不管拐了多少个弯,都认为是自己人。这样一来,江湖上就形成了一个一个的帮派,通过两两之间的朋友关系串联起来。而不在...转载 2019-04-01 20:26:07 · 725 阅读 · 1 评论 -
二叉树的简单讲解
二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。接下来介绍几个概念:叶子节点:没有子节点的节点。父节点:有子节点的节点。满二叉树:在一棵二叉树中,如果所有分支结点都有左孩子和右孩子结点,并且叶子结点都集中在二叉树的最下层,这样的树叫做满二叉树如:完全二叉树:若二叉树中最多只有最...原创 2019-03-26 09:25:24 · 929 阅读 · 2 评论 -
广度优先搜索和深度优先搜索
BFS和DFS算法解析【算法入门】2018/6/21.前言和树的遍历类似,图的遍历也是从图中某点出发,然后按照某种方法对图中所有顶点进行访问,且仅访问一次。但是图的遍历相对树而言要更为复杂。因为图中的任意顶点都可能与其他顶点相邻,所以在图的遍历中必须记录已被访问的顶点,避免重复访问。根据搜索路径的不同,我们可...转载 2019-03-17 22:32:40 · 1048 阅读 · 0 评论 -
斯特林数
【第一类斯特林数】1.定理第一类斯特林数 S1(n,m) 表示的是将 n 个不同元素构成 m 个圆排列的数目。2.递推式设人被标上1,2,.....p,则将这 p 个人排成 m 个圆有两种情况:在一个圆圈里只有标号为 p 的人自己,排法有 S1(n-1,m-1) 个。 p 至少和另一个人...转载 2019-08-15 11:21:01 · 302 阅读 · 0 评论