自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

转载 欧拉函数

处理何种问题:用于求解[1,n]中有多少个数与n互质的个数。性能:单次查询时间复杂度为,打表的话有一个线性筛,时间复杂度为O(n)。原理:可以先在1到n-1中找到与n不互质的数,然后把他们减掉比如φ(12)把12质因数分解,12=2*2*3,其实就是得到了2和3两个质因数然后把2的倍数和3的倍数都删掉2的倍数:2,4,6,8,10,123的倍数...

2018-10-23 16:59:00 158

转载 Prim最小生成树+优先队列优化

处理何种问题:求解无向连通图的最小生成树,适合于稠密图,即点少边多的无向图。性能:时间复杂度为 O(v * loge),v为点的个数,e为边的个数原理:贪心策略。实现步骤:正向模拟找连接点。即取任意一点,放入集合,找此点集合内最短的边且边的另一端点不在该集合内的点,将改点放入点集合内,重复此操作,直至所有点都在该集合内。备注:因为得首先引入一点,设...

2018-10-22 20:06:00 242

转载 KMP算法

处理何种问题:求解母串中,是否有模式串/有多少模式串/模式串的位置。性能:时间复杂度O(T_len+S_len)原理:通过Next数组来优化的,具体证明过程不知让我丢哪去了,具体证明会形成一个环。实现步骤:略备注:ios::sync_with_stdio(false); 有时可以加速cin的输入,但有些oj不行输入样例解释:Ababa...

2018-10-22 14:47:00 1324

转载 克鲁斯卡尔求最小生成树

处理何种问题:求解最小生成树,适合点多边少的无向图。(以证明,放心用)性能:时间复杂度为O(e*loge),e为边的个数。原理:贪心策略实现步骤:<1>设一个有n个顶点的联通网络为G(V,E),最初先构造一个只有n个顶点,没有边的非连通图T={V,空},图中的每一个顶点自成一个连通分量。<2>在E中选择一条具有最小权值的边时,...

2018-10-21 20:34:00 298

转载 C++ 文件输出、输出

以前一直不明白为什么有些博客上的代码有文件输入输出,复制粘贴不行吗,现在才知道原来Linux系统,不支持复制粘贴,还有就是人机交互确实不怎么样,用户体验没windows好。为了比赛,还是要学习一下文件的输入输出。/*以前一直不明白为什么有些博客上的代码有文件输入输出,复制粘贴不行吗,现在才知道原来Linux系统,不支持复制粘贴,还有就是人机交互确实不怎么样,用户体验没wi...

2018-10-01 14:25:00 134

转载 并查集

处理何种问题:就我目前对于并查集的理解来说,并查集是一种很巧妙的数据结构,他可以将根据集合内各个元素之间的关系将其划分为几个不同类别。性能:目前还没有直观感受,时间复杂度主要看测试数据的复杂程度。原理:数据结构实现步骤:while(root!=pre[root]) root=pre[root]; 线索遍历的巧妙之处备注:代码的的核心是...

2018-09-21 19:37:00 107

转载 拓扑排序

处理何种问题:虽说是排序,但是主要作用是判断有向图是否有环。性能:时间复杂度为O(E),E为边的个数。原理:每次找入度为0的点入栈,然后将与此相连的节点入度减1;重复以上步骤,直到栈中为空。记录弹出节点次数,如果次数与节点总数相同,及无环,否则,有环的存在。(证明的时候注意,如果一个点的入度已变为0,则再也不会有其他点能到达它)实现步骤:建图(vector)...

2018-09-19 20:23:00 133

转载 逆康托展开

处理何种问题:与康托展开恰恰相反,及已知元素个数和所要求的名次,可以输出该名次的排列方式。性能:时间复杂度为 O(len^2),len 为字符串长度原理:略实现步骤:略备注:名次从1开始,名次不再范围内的话会出现乱码输入样例解释:5 //元素个数2 //字典序名称输出样例解释:1 2 3 5 4 //字典序为2的排列方式#include<...

2018-09-18 16:31:00 96

转载 欧拉降幂

处理何种问题:在处理 a^b mod c 的问题中,如果遇到b的值极大,大到只能用字符串来存取时,普通的快速幂已经无法处理该问题时,就该用到欧拉降幂来处理了。性能:可以将时间复杂度降至快速幂的水平。原理: a^b mod c == a^(b mod phi(c)+phi(c)) mod c(PS: phi(x) 为欧拉函数);其核心就是将大数 b 降...

2018-09-16 23:23:00 142

转载 线段树及其基本操作

处理何种问题:数组单点更新,单点查询,区间更新,区间求和,区间求最值。性能:时间复杂度为O(logn)原理:区间跟新的懒惰标记了解一下,其余略实现步骤:略备注:在线段树里,单点更新与单点累加和树状数组上的单点跟新有区别,树状数组还需与原数组求差值,线段树不用。线段树的区间求最值差别不大,在此贴一份A过题的最值代码,用来对比找bug。#i...

2018-09-12 12:56:00 196

转载 马拉车算法

处理何种问题:给定一个字符串,求出其最长回文子串的长度。性能:虽然代码有两层循环,但是内层循环跑的次数之和为n,所以时间复杂度为O(n)。原理:由于回文分为偶回文(比如 bccb)和奇回文(比如 bcacb),而在处理奇偶问题上会比较繁琐,所以这里我们使用一个技巧,具体做法是:在字符串首尾,及各字符间各插入一个字符(前提这个字符未出现在串里)。举个例子:s="ab...

2018-09-04 20:51:00 115

转载 唯一分解定理

处理何种问题:对于任何一个大于1的自然数num,num可以唯一分解为有限个质数乘积,如:num=的形式。(补充:这里的唯一的意思是在不考虑排列顺序的情况下)性能:时间复杂度为O(sqrt(num))原理:唯一分解定理实现步骤:类似于素数筛的求素数方法。备注:当数据量大时建议先用素数筛把素数都找出来。输入样例解释:54813281 /...

2018-09-04 20:27:00 127

转载 LIS——最长上升子序列

处理何种问题:已知一个原序列,求出其最长的一个子序列,且该子序列是单调递增的。(对于其子序列的要求条件是,可以不连续,但是先后顺序不可改变)性能:普通DP为O(n^2),贪心+二分为O(n*logn),DP+树状数组O(n*logn)。原理: 贪心+二分解释不出原理,网上的资料个人感觉不是很有说服力; DP类的状态转移方程为: dp[i]=max{dp[j]+1}(1...

2018-08-30 20:40:00 109

转载 皮克定理

处理何种问题:给定顶点坐标均是整点的任意多边形,S(面积) = a(内部格点数目) + b(边上格点数目)/2 - 1 。如图所示:S=14.50a=11b=9(最上方的边内有一整数点)性能:时间复杂度为 O(n)。原理:皮克定理我在这里就不贴证明资料了。对于多边形面积的求法用的是叉积求法。在这里重点说一下--b(边上格点数目)的求法:...

2018-08-21 20:57:00 383

转载 多重背包

处理何种问题:给定n种物品和一个容量为V的背包,物品i的体积为vi,其价值为pi,以及数量numi,求其最终可以装进背包的物品最大价值。性能:时间复杂度为O(nV)原理:客观上来说,可以将其直接看做01背包(只不过相同的物品很多),但会因为物品数量太多造成超时。针对这个问题,我没将物品数量进行分段处理,例如面对一个体积为6,价值为4,数量为10的物品,可以将其转化为一...

2018-08-18 21:05:00 122

转载 叉积求多边形面积

处理何种问题:面对一个多边形,求其面积,对于多边形无限制条件,但是对于构成多边形的点必须是逆时针顺序给出。性能:在点已呈现逆时针顺序的情况下,时间复杂度为O(n)。原理: //点的记录必须要逆时针顺序所记录的面积是有向面积实现步骤:略备注:对于叉乘求面积,适用凸边形和凹边形,只要构成边是逆时针。但是将多边形分割为三角形则不适用...

2018-08-18 16:57:00 481

转载 完全背包

处理何种问题:给定 n 种物品(每种类型无限)和一个容量为 V 的背包,物品 i 的体积为 vi,其价 值为 pi,求其最终可以装进背包的物品最大价值。性能:时间复杂度为O(nV)。原理:在学习背包之前,可能是思考方向的不对的原因,导致对背包题解的做法有些误解,现在借着写完全背包我在这里阐述一下我对于背包的理解。在此,我先假定一个数组dp[V],里面存的是当背包容...

2018-08-17 20:49:00 116

转载 威佐夫博弈

处理何种问题:有两堆各若干的物品,两人轮流从中取至少一件物品,至多不限,或从两堆中取相同件物品,规定最后取完者胜利。性能:博弈题,有规律,O(1)的时间复杂度。原理:先说结论:若两堆物品的初始值为 (x,y) ,且x<y,则另z=y-x;记w=;若w=x,则先手必败,否则先手必胜。推论如下:这种情况下是颇为复杂的。我们用(a[k],b[k])(...

2018-08-17 14:16:00 122

转载 尼姆博弈

处理何种问题:有n堆物品,每堆物品数为 arr[i] ,双方轮流从中取物品,每次只能从一堆物品中取任意件物品,最少取一件,取到最后一件物品的人获胜,求谁最后获胜。性能:因为是有公式,所以时间复杂度为O(n)。原理:结论:把每堆物品数全部都异或起来,如果得到的值为0,那么先手必败,否则先手必胜。在这里补充一个知识点,异或:相同为0,不同为1,同一些数异或的顺序不会对...

2018-08-16 16:59:00 116

转载 01背包

处理何种问题:给定n种物品和一个容量为V的背包,物品i的体积为vi,其价值为pi,求其最终可以装进背包的物品最大价值。性能:时间复杂度为O(nV)原理:首先明确一点:对于先放那个物品对最后结果无影响设 dp[i][j] 为有前i个物品,且容量为j时背包所能得到的最大价值(暂时不要问是怎么得出dp[i][j]值的),则当出现第(i+1)个物品时,dp[i+1...

2018-08-16 13:09:00 96

转载 巴什博弈

处理何种问题:有n个石子,两个人轮流取石子,规定至少取1个,最多取k个,最后取光者获胜。性能:时间复杂度为O(1)原理:n%(k+1)==0,后手必胜(先手无论怎么取,后手只需要补全至k+1个即可);n%(k+1)!=0,先手必胜(先手只需要第一次将n%(k+1)的余数取尽,先手就转成“后手”了)实现步骤:略备注:遇到此类问题可向巴什博弈方向转化,...

2018-08-15 19:18:00 93

转载 斐波那契博弈

处理何种问题:有一堆个数为n的石子,游戏双方轮流取石子,满足:1) 先手不能在第一次把所有的石子取完,且最少取1个;2) 之后每次可以取得石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取得石子数的两倍)。约定取走最后一个石子的人为赢家,求谁获胜。此类问题有一个结论:当n是斐波那契数时,后手必胜;当n不是斐波那契数时,先手必胜。(先手胜当且仅当n不是斐...

2018-08-14 20:49:00 193

转载 一. 至少转最多

处理何种问题:有m 种类型的物品(每种类型的物品个数可视为无限),从中选出n个物品,求物品s至少有一次连续选k件的方案数。例题:抛硬币,抛n次,求正面至少连续出现k次的种数。抛3次,连续出现2次正面的种数是3(110,011,111)。性能:时间复杂度为O(nm),空间复杂度也是(nm)。原理:设事件A={最多选n个s物品连续},B={最多选k-1个s物品连续},...

2018-08-14 17:01:00 131

转载 平面分割类问题

一. n条直线分割平面l 问题描述:n条直线,最多可以把一个平面分为多少个区域。l 公式:f(n)=f(n-1)+n=n(n+1)/2+1;l 分析:当有n-1条直线时,平面最多被分割成 f(n-1) 个区域。则第n条直线要切成的区域数最多,就必须于每条直线相交且不能有同一交点。这样就会得到(n-1)个交点。这些交点将第n条直线分为2条射线和n-2条线段。而每...

2018-08-09 20:54:00 267

转载 求凸包(安德鲁算法)

处理何种问题:凸包可以看成在木板上钉许多钉子,用一根橡皮筋框住所有钉子所得到的多边形,最终能求得都由哪些钉子构成该凸包。如下图所示:性能:由一个快排(O(nlogn))和一个遍历找点(O(n)),总体时间复杂度为O(nlogn)。原理:点:A(x1,y1),B(x2,y2)向量AB=(x2-x1,y2-y1)=(x,y)向量的叉积:a X...

2018-08-06 20:56:00 369

转载 GCD和exGCD

#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int GCD(int a,int b)//虽然这个没有下面那个GCD简便,但是这个没有爆栈的风险,而且时间和下面那个一样{ int temp; while(a...

2018-07-24 17:24:00 154

转载 截流法进行区间更新

截流法进行区间更新,这种算法在某些特定情况下很简便,但是其局限性也很明显,针对各类型的题目酌情使用,之所以将其挑出来单独写一篇是因为其思想没见过,很是新颖,所以在这里值得一提。算法性能:在进行区间修改和单点修改时的算法时间复杂度时都是 O(1),但是进行查询时的时间复杂度是 O(n),对于这种情况,所以一般在进行查询次数较少的情况下,选择这种方法才可取。参考题目:牛客--区间 (in...

2018-07-24 14:35:00 106

转载 匈牙利算法

作用:用于求一个二分图中的最大匹配数。算法:一种类似手动模拟的一种暴力算法。说明:柯尼希定理:一个二分图的最大匹配数等于这个图中最小点覆盖数,最小点覆盖数(一条边上有一点覆盖即为该边覆盖,求覆盖所有边的最小点数)。柯尼希定理的推论:最小路径覆盖=节点数-最大匹配数(最小路径覆盖—选择最少不相交的边覆盖所有的点)只使用有向无环图。代码#include<iostream...

2018-05-03 18:52:00 134

转载 大数模板--直接重载运算符

记不得哪找的板子,感谢原作者。真的很好用!!!!!!!#include <iostream>#include <stdio.h>#include <string.h>#include <ctype.h>using namespace std;#define MAXBIT 1007#define BITTY...

2018-04-22 20:40:00 99

转载 米勒罗宾素数判定法

说明:根据费马小定理做的,时间复杂度很低。但是有一定概率判断出错,一般count==5时判断几率有99%。代码#include<cstdlib>#include<ctime>#include<cstdio>using namespace std;const int count=10; //提高判断精确度int modul...

2018-04-22 20:25:00 325

转载 SPFA+前向星优化

作用:源点到i点的最短距离(最*权值)。算法:本质上是BFS,但利用邻接表来处理点与点之间的关系,处理量更大 ;前向星是一个数组模拟的头插法链表,再处理上比vector快。代码时间复杂度 : O(|V|*|E|) ,最坏情况下输入 : N(点的数量) M(边的数量) src(源点)X Y(边) w(权值)输出 : dist[i] 源点到各点之间的最短距...

2018-04-19 17:27:00 173

转载 矩阵的基本操作

说明:利用c++的符号重载,可以使代码更加简洁。矩阵的加法,减法必须要求两个相同大小的矩阵;矩阵相乘时,只有第一个矩阵的列数和第二个矩阵的行数相同时才有意义。两个m×n矩阵A和B的和(差),标记为A+B(A-B),一样是个m×n矩阵,其内的各元素为其相对应元素相加(减)后的值。例如: 设A为m*k的矩阵,B为k*n的矩阵,C=AB,会得到一个m*n的矩阵,其中矩阵C...

2018-04-06 12:40:00 362

转载 矩阵快速幂

处理何种问题:用于优化加速一些线性关系式,可将一些时间复杂度降至O(logn)。(如果题目上出现 1e18 之类的数据范围,就可以往矩阵快速幂上想了)性能:具体的时间复杂度为O(edge * edge * log n),edge为矩阵的阶数。原理:矩阵乘法性质、快速幂。实现步骤:以斐波那契数列为例公式为: F[i] = F[i-1] + F[i-2]...

2018-04-04 21:08:00 120

转载 快速幂取模

作用:优化普通求幂算法的时间,空间复杂度,由一个O(n)优化到O(logn)。算法:1. (a*b)%c=(a%c)*(b%c)2. 例如:1003的2进制是1111101011 ,说明:此算法不可算负次方的情况,负数幂可用,记得边算边取模。代码int fpow(int a,int n,int mod) //输入参数 ...

2018-04-02 21:10:00 81

转载 欧拉筛法

作用:求出[2,N]内所有素数。算法:每个合数必有一个素数因子,利用已知素数去筛除合数。说明:因为答案数组是从1开始的,所以用binary_search( ) 、lower_bound( )和upper_bound( ) 函数不需要另行判断,但注意写法要均加1 ---------------(Ans_p+1,Ans_p+tot+1,x) 。代码时间复杂度:近似O(n)...

2018-04-01 21:04:00 81

转载 康托展开

作用:求无重复元素的集合中,任意一种排列方式在其全部按字典序排列中的位置。算法:Ans=说明:其中a[i]表示---[第i个数>第(i+1~n-1)个数] 的个数。例子: 2 1 4 3   比2小的有1个:1*3!   比1小的有0个:0*2!   比4小的有1个:1*1!   比3小的有0个:0*0!所以2 1 4 3在{1、2、3、4}的全...

2018-04-01 17:10:00 86

转载 HDOJ--3681--Prison Break(BFS预处理+状态压缩DP)

题意F--起点S--空格G--能量池,只能充一次电,充完之后G变为S,也可已选择不充而当成普通的SD--激光区,不能走Y--电源开关M被关在一所监狱之中,F为起点,每走一步(上下左右)消耗1节能量,只要关闭完所有的Y就可以直接飞出去,可以到能量池里进行充电。问M要想出去所携带的电池的最小尺寸是多少。注意:能量池和开关的总和小于15。思路首先将图中所有的F,...

2018-03-24 21:14:00 117

转载 POJ--2288--Islands and Bridges(状态压缩DP+bfs)

介绍通过图G经过所有的节点,且所有的节点仅经过一次的通路,就是哈密顿通路。题意有N座岛,M座桥,让你找到一条哈密顿通路,当经过一座岛就加上该岛的价值,如果相邻两岛之间有桥再加上两岛价值之积,如果相邻三岛之间两两都有桥,再加上三岛价值之积。求最大总价值是多少以及达到最大总价值的路径有几条。思路这道题还算一个比较中规中矩的状压DP入门题。就是得设计两个状态转移方程,所以有写麻...

2018-03-20 13:42:00 117

转载 HDOJ--3001--Travelling(状态压缩DP+bfs)

介绍这道题和3311差不多,只需将二进制换为三进制就好,但对于在做3311时用的是自顶向下方法做的话,上一题的模板都不能套了,还得换个思路。题意N个城市,M条路(有重边,无向图),x->y( y->x )需要花费 w 元路费,条件:起点城市随意选,每个城市最多去2次,但每个城市都得去过;问最少需要多少路费,无解输出-1。思路这道题无法用自顶向下式的方案来做,因...

2018-03-17 20:28:00 129

转载 POJ--3311--Hie with the Pie(暴力枚举+floyd)/(状态压缩DP+floyd)

简介状态压缩入门,先说用暴力枚举的方法做的,再说状态压缩DP,对于刚开始学习状态压缩的同学,两者相互比较学习,可以明显看出两者区别,有利于对状态压缩DP的理解,提前说下,两者耗时是 157Ms和 0Ms 。题意一披萨店员送披萨,从披萨店开始送给N个客户会给你一个(N+1)*(N+1)的矩阵,对于矩阵 g[i][j] 表示i处到 j 处所耗费的时间,0 代表披萨店,每条路径...

2018-03-14 23:56:00 112

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除