自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 王道数据结构代码笔记

数据结构考研代码

2022-07-15 20:23:35 3291 2

原创 考研笔记——王道C语言

写在前面的话基于王道龙哥的代码写的笔记,为了加深印象,同时也为了后期复习。初级阶段太简单了,中级阶段其实也简单,但以前没有写结构体的习惯,习惯直接把结构体拆成数组写,现在觉得还是挺方便的,主要也是为了这个才做的笔记,把一堆数据结构放在一起便于对比。高级阶段的什么文件、OS那块还没看,如果后期写了笔记还会补。主要是面向我自己写的,不为教学也不为扩列,所以别指指点点,有哪里写的不对可以说,别在那balabala什么写的太浅,就是复制代码什么的。我完全为了自己,只是觉得发博客就是顺手的事。主要就是将龙哥的

2022-03-19 11:52:05 3447

原创 素数判定

一个恒成立的等式a^(p-1)%p≡1(p为素数 a但如果反过来(倘若a^(p-1)%p=1,a但是,它的否逆定理成立。即若a^(p-1)%p≠1,则,p为合数。所以,对于需要判断素数的p,我们随机枚举若干个a(a显然a^(p-1)需要用快速幂,虽然可以边乘边模,但是a*a显然也有可能超。所以定一个函数f(a,b,p)来计算a*b%p;如果b为偶数 f(a,b,p)=f((

2016-09-14 22:12:38 1188

原创 斐波那契数列矩阵快速幂

#include#includeusing namespace std;const int init[2][2]={{0,1},{1,1}};struct node{ int x[2][2]; node(){ memset(x,0,sizeof(x)); }};node ci(node a){ node turn; int i,j,k; for(i=0;i<2;i++)

2016-09-12 21:56:07 970

原创 树状数组

树状数组满足树形结构,只需要n的数组。上图更直观:上面的树状数组是c,下面队列数组是a。c[2]是c[1]和a[2]的父亲节点(也可以理解为c[1]=a[1],c[2]是a[1]和a[2]的父亲节点,注意不是所有的i都有a[i]=c[i],a[2]≠c[2],显然只有a[2*k+1]=c[2*k+1])c[6]是a[5](c[5])和a[6]的父亲节点,c[4]是c[2](

2016-09-05 21:51:55 721

原创 欧拉函数

欧拉函数求的是小于等于n的正整数中与n互质的数的个数。例如φ(8)=4,因为1,3,5,7均和8互质。通式:其中p1, p2……pn为x的所有质因数,x是不为0的整数。φ(1)=1(唯一和1互质的数(小于等于1)就是1本身)。注意:每种质因数只一个。 比如12=2*2*3那么φ(12)=12*(1-1/2)*(1-1/3)=4若n是质数p的k次幂,,因为

2016-09-03 16:43:35 863

转载 中国剩余定理

中国剩余定理(CRT)的表述如下 设正整数两两互素,则同余方程组                               有整数解。并且在模下的解是唯一的,解为                                 其中,而为模的逆元。 代码: int CRT(int a[],int m[],int n) {

2016-09-03 15:37:47 795 1

转载 求逆元的方法汇总

逆元它是一个可以取消另一给定元素运算的元素。 对于正整数a和m,如果有a⋅x≡1(mod  m),那么把这个同余方程中x的最小正整数解叫做a模m的逆元。前提求a(modm)意义下的逆元,要求a与m互质,否则不存在乘法逆元定理欧拉定理(费马小定理)欧拉定理:若a与m互质,那么有aφ(m)≡1(mod  m)方法1.欧拉定理根据欧拉定理 aϕ

2016-09-03 15:06:38 2225

原创 拓扑排序

拓扑序列是将一个有向无环图的点排序后的序列,排序规则是,对任意一条由v指向u的边都满足在序列中v在u左边,显然,对于一个有向无环图,拓扑序列可能不唯一。为什么要有向?因为拓扑排序的规则就是方向。为什么要无环?如果对于u和v两个点在同一个环内,就意味着u可以到v,v可以到u,那么在拓扑序列中,u是在v的左边还是右边呢?说一下拓扑排序的思路。(看了很多代码都没看懂 只看懂了拓扑序列 下面是

2016-09-03 14:46:32 853

原创 判断唯一最小生成树(次小生成树)

先说一下最小生成树的思路 将边按长度从小到大排序 依次判断 如果会出现环就跳过这条边(用到并查集) 否则添加 直到添加到n-1条边 就是最小生成树至于次小生成树 先提供第一种思路先建成最小生成树 显然继续再添加任意一条边都会形成环 倘若新添的这条边与形成的环中除新添的边以外的最大的边长度相等 说明最小生成树不唯一 枚举一下就好(求这条边减环中除它以外的最大值就可以求次小生成树)重点就是

2016-08-31 21:58:18 4168 2

原创 并查集(擒贼先擒王)

并查集是若干个集合,可以判断两个对象是否在一个集合中,从而判断它们需不需要进行一个操作。每个集合都是一棵树(注意不一定是二叉树),这里说一下二叉树和其他树的一点区别,二叉树编号是按位置来的(一棵二叉树一开始是怎样就一直是怎样,变的只是每个节点的值,编号永远不会改,父亲节点也永远不会改),而其他树的编号是按新建节点的顺序来的,越前添加的新节点编号越小(这个编号可以移动,比如某个节点的父亲节点可以

2016-08-30 19:56:39 958

原创 堆排序(优先队列)——合并果子

首先说一下堆的性质:分为大根堆和小根堆,根节点都是最值,小根堆的根节点是最小的,每个堆都比它的两个子堆要小,大根堆的根节点是最大的,每个堆都比它的两个子堆要大。顺便说一下二叉树的性质,左子树小于根节点小于右子树,所以都要先序遍历。合并果子,是指有n堆果子,每次合并两堆,每次花费的力气为两堆之和,求合并为一堆后,花费的最小力气。显然,每次合并最小的两堆即可满足题意。又显然,要用堆排序

2016-08-29 22:01:27 1531

原创 Bellman-Ford的队列优化(求某点到所有点的最短距离)

思路:将源点入队,从源点开始邻点便利,判断所有邻点中是否需要更新,将需要更新的更新完后判断此点是否在队列内,若不在,将此点入队,重复此过程。#includeusing namespace std;int u[8],v[8],w[8];int first[6],next[8];int dis[6],book[6];int que[101],head=1,tail=1;const

2016-08-29 21:06:10 1193

原创 最短路径算法对比分析

最短路径算法对比分析FloydDijkstraBellman-Ford队列优化的Bellman-Ford空间复杂度O(N^3)O(M)O(M)O(M)时间复杂度O(N^3)O((M+N)logN)O(

2016-08-29 19:52:17 1181

原创 Bellman-Ford——解决负权边(求某点到所有点的最短距离)

Bellman-Ford与dijkstra一样 都是求某点到所有点的最短距离 先说一下Bellman-Ford的思路:将m条变全部枚举(假设第i条边连接的点是u[i].v[i])判断v[i]到起点的距离是否可以通过v[i]到u[i]的距离和u[i]到起点的距离和替换从而更新dis[v[i]],显然,第一次循环一定会将离起点最近的点更新至最小,第二次循环又会将除起点外离离起点最近的点最近的点

2016-08-29 13:20:21 939

转载 矩阵乘法

【矩阵乘法入门】  http://blog.csdn.net/mig_davidli/article/details/8601304;这算是我个人的学习笔记吧,再简单的看了【矩阵乘法入门以后】,去百度文库上查了下矩阵乘法的应用,挺不错的。首先练习了一下 poj  3233 。 http://poj.org/problem?id=3233; 这道题的矩阵求和 应用了两次二分,很灵活。

2016-08-28 21:05:39 913

原创 扩展欧几里得算法

首先推荐两篇比较好的博客http://blog.csdn.net/lincifer/article/details/49391175http://blog.csdn.net/zhjchengfeng5/article/details/7786595 (然后下面便是一个蒟蒻的总结QAQ)扩展欧几里德算法基本算法:  对于不完全为 0 的非负整数 a,b,gcd(a,b)表

2016-08-28 20:57:54 940

转载 C语言链表各类操作详解

链表概述   链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址。因此,head指向第一个元素:第一个元素又指向第二个元素;……,直到最后一个元素,该元素不再指向其它元素,

2016-08-27 20:19:02 1229

转载 C语言vector的使用方法 C++中vector的用法详解

vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。为了可以使用vector,必须在你的头文件中包含下面的代码:#include vector属于std命名域的,因此需要通过命名限

2016-08-27 20:13:05 62466 3

转载 SPFA

#include#include#includeconst int maxn=100,INF=1000000000;int a[maxn][maxn],p[maxn],d[maxn],q[maxn*maxn];int main(){ freopen("spfa.in","r",stdin); freopen("spfa.out","w",stdout); int i,j,k,m,

2016-08-27 17:17:05 963

转载 A*寻路算法讲解+源码DEMO演示

本文源码下载地址:http://download.csdn.net/detail/sun2043430/5907609(第一版) http://download.csdn.net/detail/sun2043430/5909315(第二版) https://github.com/sun2043430/A_Star_Algorithm

2016-08-27 14:35:24 12030 1

原创 最小生成树之KRUSCAL

最小生成树求连通图中经过所有点的最短路径 #include #include #include const int maxn=1010,maxm=10010; struct node{ int x,y,w; }; struct node a[maxm],tmp; int f[max

2016-08-26 21:13:15 866

原创 Floyd(求图中任意两点最短路径)

题目大意是:有N个人,相互之间可以传递信息,但是A传给B与B传给A的时间是不一样的,一个人同时可以向多个人传递信息,时间不一样,问你把消息传给谁?可以在最短时间让消息传递给所有人。典型的FLOYD求最短路,最后找到所有人距离最大之最小那一个人,输出答案。---------------------问题重述 描述 众所周知,证券经纪业依靠的就是过度的传言。您需要想出股票经纪人中

2016-08-26 21:08:43 3222

转载 C++的重载运算符

C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。   运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运算符

2016-08-26 20:24:39 3945

转载 STL简介

原创地址:http://blog.csdn.net/a199228/article/details/6622540STL 简介 1.       STL 是什么 作为一个C++ 程序设计者,STL 是一种不可忽视的技术。 Standard Template Library (STL) :标准模板库, 更准确的说是 C++ 程序设计语言标准模板库。STL 是所有C++ 编译器和所

2016-08-26 20:22:21 1006

原创 高精度加减乘除

//高精度加法 #include #include #include int a[1000],b[1000],c[1000]; char s[1000]; int main(){ int i,j,k,m,n; int alen,blen,clen; ge

2016-08-26 19:59:21 1782

原创 排序

//堆排序 #include #include int a[100010],len=0; void insert(int x){ a[++len]=x; int k=len,t; while(k>1 && a[k]<a[k/2]){ t=a[k];a

2016-08-26 19:57:22 815

转载 静态数组Treap(用随机数维护的二叉搜索树)

#include #include struct node{ int x,w,h,r,l; }; struct node a[100001]; int e,root=1; void rotate_left(int v,int u){ int t=a[u].h;

2016-08-26 19:51:37 919

转载 LCA和RMQ的一些事情(最近公共祖先与区间最值查询)

原创戳这里本来想详细写写LCA和RMQ的东西的,但是觉得积累得还不够而且比较懒就不写了。鉴于都是超经典问题,网上和大量书籍都是很好的学习材料,所以就不想说了这里只简单说说原理,说说代码实现上面的一些细节和注意问题,并且给出模板 下面写提供几个学习LCA和RMQ的博客,都很通熟易懂,向博主致敬http://dongxicheng.org/structure/lca-rmq/

2016-08-26 19:37:40 2671

转载 位运算入门应用及技巧

转载的位运算原文戳这里位运算是信息奥赛中重要的一部分,由于位运算的速度比一般运算快,掌握了位运算,就能够在程序编写时更加灵活,提高程序效率,对解题有十分重要的帮助。位运算的所有操作都是建立在二进制位上的,所以在学习位运算之前,请保证熟悉了二进制的基本运算法则以及基本的逻辑与、或、非运算。一、位运算基本操作1、左移操作 左移操作可以将二进制数a的每个数位均进行左移,并

2016-08-26 19:20:20 1003

原创 POJ 1986 Tarjan离线算法(最近公共祖先)

题意就是求两个点之间的最短距离 那个字母是没有用的#include#include#include#includeusing namespace std;const int N=40010;vector Q[N],num[N];//定义容器 Q[0]为一个容器 Q[1]为一个容器以此类推 每个容器都类似于一个数组 只是需要多大能开多大 节约内存(大概是这样我也不是很懂) int fa

2016-08-26 19:09:39 1097

原创 prim(n^2)求图中最小距离(最小生成树)

#includeconst int maxn=1001,inf=1000000000;using namespace std;int a[maxn][maxn],d[maxn],p[maxn];int main(){ int i,j,k,m,n; scanf("%d%d",&n,&m);//共n个点m条边 求走遍所有点的最小路径 for(i=1;i<=m;i++){ int x

2016-08-26 18:29:45 1239

原创 dijkstra(n^2)求某个点到所有点的最短路径

#include const int maxn=1001,inf=1000000000;using namespace std;int a[maxn][maxn],d[maxn],p[maxn];int main(){ int i,j,k,m,n,t; scanf("%d%d%d",&n,&m,&t);//共n个点 m条边 求所有点到t点的距离 for(i=1;i<=m;i++){

2016-08-26 17:36:32 4351

空空如也

空空如也

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

TA关注的人

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