- 博客(29)
- 资源 (7)
- 收藏
- 关注
原创 Runtime Error(ACCESS_VIOLATION)常见解决方法
Runtime Error(ACCESS_VIOLATION)即运行时访问了非法内存导致异常。在我看来,主要有以下三种情况会导致这种错误:数组开的不够大,假如题目的数据范围是1e6,而我们如果只开了1e5的数组就会导致这个错误解决办法:查看题目数据范围和自己所开数组数组访问异常,有时候即使我们申请的内存是可用的,但在下面访问时不小心访问了所开范围外数组下标解决办法:把代码认真看一遍使...
2020-01-31 10:03:56 11844
原创 洛谷P3373——区间加法和区间乘法结合的线段树
题目链接区间既有加法又有乘法,直接的乘法线段树显然就不行了,因为先加后乘和先乘后加绝对不一样。这时我们需要设置两个标记,分别是乘法标记和加法标记:typedef long long ll;const int N=1e5+10;ll a[N];struct tree{ ll l,r; ll sum; ll p_lazy,m_lazy; //前者为加法标记,后者为乘法...
2020-01-30 23:28:11 227
原创 线段树入门(加法、根号、乘法)
线段树简介线段树,一种特殊的二叉树——二叉搜索树。它将一段区间划分为若干单位区间,每一个节点都储存着一个区间。它功能强大,支持区间求和,区间最大值,区间修改,单点修改等操作线段树的每一个节点都储存着一段区间[L,R]的信息,其中叶子节点L=R。它的大致思想是:将一段大区间平均地划分成2个小区间,每一个小区间都再平均分成2个更小区间……以此类推,直到每一个区间的L等于R(这样这个区间仅包含一个节...
2020-01-30 22:37:41 1079
原创 归并排序
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。一般是将两个有序表合并成一个有序表。归并排序是一种稳定的排序方法,时间复杂度O(nlogn)下面举例子:已知a,b数组,最终我们需要的是合并后的c数组。将a数组的所有数字单独看成n个子数组,将b数组所有数字都单独看成m个子数...
2020-01-29 14:35:11 80
原创 二(三)分查找
二分查找二分查找,它适用于有序的顺序表。思路是:首先将给定值与表中中间位置元素的关键字进行比较,若相等,则查找成功,返回该元素的存储位置;若不等,则所需查找的元素只能在中间元素以外的前半部分或者后半部分中。然后再缩小的范围内继续进行相同的查找,如此重复直到找到为止。如果确认表中没有所需查找的元素,则返回查找失败的信息代码:// 二分查找(非递归)int binary_Search(i...
2020-01-29 13:43:36 151
原创 组合数
组合数基本公式C(n,m) = n!/(m!(n-m)!)其中C(n,m)中n>m,故n在下面m在上面杨辉三角当0≤m≤n≤1000,1≤p≤1e9,直接使用杨辉三角打表思路:2n=C(n,0)+C(n,1)+C(n,2)+…+C(n,n-1)+C(n,n)C(n,m)=C(n-1,m)+C(n-1,m-1);int C[10005][10005]; //如果大于10000...
2020-01-28 20:33:31 126
原创 质因数分解
Pollard Rho质因数分解1975年,John M.Pollard提出了第二种因数分解的方法,Pollard Rho快速因数分解。该算法时间复杂度为O(n^0.25)分解质因数过程:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商作...
2020-01-28 19:55:32 406
原创 素数筛选及区间素数
埃氏筛法算法复杂度O( n*log(log n) )原理:从2开始,每第一次出现且之前没有它的因数出现就一定是素数,然后再把它的所有倍数设为truebool isprime[maxn]; //maxn即需要求多少范围里的素数,maxn最大为2e^7int prime[N]; //根据maxn的大小调节,该数组储存了maxn范围内的所有素数int num;void Prime(){...
2020-01-28 19:32:02 703
原创 递推公式&斐波那契数列的几种求法
什么是递推公式递推公式就是形如斐波那契数列那样,每一项都由前面几项运算求得下面以斐波那契数列为例讲解递推公式的几种求解方法斐波那契数列斐波那契数列形式如下:学习C语言后我们都知道斐波那契数列的递归求法,很好理解:1.递归求法时间复杂度O(2n)int Fibonacci(int n){ return n>2?Fibonacci(n-1)+Fibonacci(n-2)...
2020-01-28 19:19:25 13970
原创 Module(取模运算)
定义给定一个正整数p,任意一个整数n,一定存在等式 :n = kp + r其中 k、r 是整数,且 0 ≤ r < p,则称 k 为 n 除以 p 的商,r 为 n 除以 p 的余数对于正整数 p 和整数 a,b,定义如下运算:取模运算:a % p(或a mod p),表示a除以p的余数模p加法:其结果是a+b算术和除以p的余数模p减法:其结果是a-b算术差除以p的余数模p乘法...
2020-01-28 13:18:27 1547
原创 Miller-Rabin素数判定
Miller-rabin算法是一个用来快速判断一个正整数是否为素数的算法。它利用了费马小定理和二次探测费马小定理:如果p是质数,且a,p互质,那么a(p-1) mod p恒等于1。也就是对于所有小于p的正整数a来说都应该复合a(p-1) mod p恒等于1。那么根据逆否命题,对于一个p,我们只要举出一个a(a<p)不符合这个恒等式,则可判定p不是素数。Miller-rabin算法就是多次用...
2020-01-27 21:31:00 417
原创 C++ math(常用)
计算次幂的函数:以e为底:double exp (double x);float exp (float x);long double exp (long double x);double exp (T x); // additional overloads for integral types求x的y次方double pow (double base, ...
2020-01-27 21:21:12 1365
原创 求任意凸多边形面积
任意给出一个三角形ΔABC,设其顶点坐标分别为A(x1, y1),B(x2, y2),C(x3, y3),那么根据线性代数的知识,ΔABC的有向面积可表示为:给出任意一个多边形,其顶点坐标依次为(x0,y0),(x1,y1),(x2,y2),…,(xn,yn)(其中n=2,3,4,…),则其面积可表示为:故计算的函数为:double any_ploygon_area(int x,int ...
2020-01-27 21:12:50 1496
原创 快速幂
以上图中求a11为例看一下:xn(二进制位从右向左)ansx(x^ (20))1xx2(x^ (21))1x3x4(x^ (22))0x3x8(x^ (23))1x11(结束)………………代码如下:(%和*是同一优先级且都是自左向右运算)typedef long long ll;ll quick_pow(ll x,l...
2020-01-27 20:30:28 129
原创 GCD
辗转相除法(欧几里得算法)//不必在意a、b大小关系,即使a小于b,第一次递归也会交换a和btypedef long long ll;ll gcd(ll a,ll b){ return b==0?a:gcd(b,a%b);}二进制算法在1e4以内的运算次数中,gcd的递归比较快,但是当运算次数高达1e6及以上,位运算算法非常节省时间实现原理:若a、b都是偶数,则gcd(a,b...
2020-01-27 17:57:22 1181
原创 C++ string
string类库及其函数在程序中使用string类型,必须包含头文件 <string> (注意不是cstring),string只是单纯的字符串,末尾没有’\0’构造和析构函数string s;string s(str) //str赋值给sstring s("....") //将C字符串作为s的初值string s(num,c) //生成一个字符串,包含num...
2020-01-27 16:58:35 145
原创 C++ unique()函数
头文件#include <algorithm>使用前一定要先将无序的列表排序,使重复的元素相邻原理该函数的作用是“去除”容器或者数组中相邻元素的重复出现的元素PS:这里的去除并非真正意义的erase,而是将重复的元素放到容器的末尾,返回值是去重之后的尾地址函数的返回值为开始重复的第一个元素举例int数组a[7](排过序的):1,1,2,3,3,3,6使用过uniq...
2020-01-26 23:38:58 154
原创 C++之sstream
sstream<sstream>库中声明的标准类可以通过传入的数据类型判断需要哪些转换,自动选择所必需的转换。而且转换结果保存在stringstream对象的内部缓冲中。我们不必担心缓冲区溢出,因为这些对象会根据需要自动分配存储空间sstream库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入/输出...
2020-01-26 23:33:01 224
原创 STL之stack
stackstack(栈)又名堆栈,它是一种特殊的线性表。仅能在表尾进行插入和删除操作的线性表。和queue相比,栈像压入弹夹的子弹一样,满足“先进后出”的规则头文件#include <stack>声明stack<T> s;操作函数把元素a加入入栈:s.push(a);删除栈顶的元素:s.pop();返回栈顶的元素:s.top();判...
2020-01-26 23:23:24 213
原创 STL之set
setset集合是C++ STL库中自带的一个容器,set具有以下两个特点:set中的元素都是排好序的set集合中没有重复的元素常用操作:begin() 返回set容器的第一个元素的地址end() 返回set容器的最后一个元素地址clear() 删除set容器中的所有的元素empty() 判断set容器是否为空max_si...
2020-01-26 23:06:58 127
原创 STL之queue、deque、priority_queue
queuequeue与stack非常相似,但是不同的是queue是先进先出,而stack是先进后出定义queue对象的:queue<int>q1;queue<double>q2;queue的基本操作有:入队:如q.push(x); 将x元素接到队列的末端出队:如q.pop(); 弹出队列的第一个元素,并不会返回元素的值访问队首元素:如q.f...
2020-01-26 22:58:25 167
原创 STL之pair
pair的简介pair是将2个数据合成一组数据,如STL中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first,second 因为pair使用的是struct不是class,所以无需申明头文件便可以直接使用pairpair的构造创建一个空的pair对象,它的两个元素分...
2020-01-26 21:47:39 82
原创 STL之map
mapC++中map提供的是一种键值对容器,里面的数据都是成对出现的,如下图:每一对中的第一个值称之为关键字(key),每个关键字只能在map中出现一次;第二个称之为该关键字的对应值(value)。且其key是自动按升序排列的。初始化的map中,数据类型均有默认值map基本函数begin() //返回指向map头部的迭代器clear() //删除所有元素count()...
2020-01-22 23:58:46 183
原创 STL之vector
可变数组vectorvector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。vector的数据安排及操作方式与array非常相似,唯一的差别在于array是静态空间,一旦配置了就不能改变;vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素使用vector之前,必须包含相应的头文件和命名空间:#include <vector>using...
2020-01-22 17:22:52 157
原创 双向链表
简介在学习了单向链表后,我们会发现链表只能从头结点开始一直往下直到链尾,而无法访问前面的节点,由此我们引入双向链表,顾名思义,双向链表就是多了一个前驱指针指向该节点的前一个节点指针实现结构和单向链表类似的,多了个指向前一个节点的指针struct node{ int data; struct node* prev; struct node* next;};初...
2020-01-22 13:40:51 97
原创 二叉树
双链式结构构造//构造一:需要使用malloc()函数创建内存空间typedef struct BinaryTree{ int data; struct BinaryTree *lchild,*rchild;}BiNode,*BiTree;//构造二:需要使用new关键字创建内存空间typedef struct BinaryTree{ int data; ...
2020-01-20 10:53:11 655
原创 Java高精度——BigDecimal
BigDecimalBigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负scale 次幂。因此,BigDecimal表示的数值是(unscaledValue*10-scale)。二、构造函数第一种:把double转化为BigDecimalBigDecimal(dou...
2020-01-20 10:42:51 341
原创 最小生成树——Kruskal详解
最小生成树一个有 n 个结点的连通图的生成树是原图的最小连通子图,包含原图中的所有 n 个结点(意味着有n-1条边),能保持图连通并且权值和最小的边Kruskal 求MST复杂度:O(E*logE),E为边数。适合于求边较少图的最小生成树原理:首先将所有的边按从小到大顺序排序,并认为每一个点都是孤立的,分属于n个独立的集合。然后按顺序枚举每一条边,如果这个边不会与之前选择的所有边组成回...
2020-01-19 22:57:32 660
原创 并查集和带权并查集
并查集简介并查集是一种以数组为存储结构的树形数据结构,当其中一些元素发生从属关系时,我们把可以关联的元素看做一个个的集合(即A连接B,C也连接B,那么A,B,C可以看做一个集合)基本操作初始化首先定义一个father数组,初始化就是令数组中每个人的爸爸都是他自己,即f[i]暂时(这里很重要)表示i的爸爸。当出现这种情况时,它就是这一脉的祖宗for(int i=0;i<n;i++)...
2020-01-12 10:16:07 637
数据结构实验——赫夫曼树相关
2020-05-13
数据结构实验——二叉树相关操作
2020-05-13
数据结构实验——字符串相关操作
2020-05-13
数据结构实验——链表实现XXX管理系统
2020-04-06
Base conversion.cpp
2020-02-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人