自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++STL基础常用简介

另外string最关键的功能为a.substr(起始位置,子串长度) 分三种情况,1.输出从第一个数到第二个数的字符串,2.如果第二个数过大,那么输出第一个数到最后(这里第一个数为起始位置,第二个数为字串长度)3.省略第二个数,那么输出第一个数到最后。vector动态数组,头文件为 #include , 能够扩展延伸,以数组的形式存储vector开数组时采用倍增的思想,开始时是开一个一般大小的数组,每次长度不够,长度乘2。优先队列:优先级最高的先出队。插入一个元素时,插入它的负数。

2023-02-07 23:20:10 105

原创 堆(用数组模拟堆)

当下标为a和b的两个数进行交换的时,不仅要交换h[a]和h[b]的值,同时也要交换ph[k1]和ph[k2]的值,而k1和k2可以通过hp[a]和hp[b]找到,所以交换时的代码为swap(ph[hp[a]],ph[hp[b]]);当ph[k1]和ph[k2]的值交换后,他们对应的映射同样也需要交换,这样才能保证两者对应映射,固有swap(hp[a], hp[b])。既能够通过“它是第几个插入的数”找到“该数对应的下标”,也能够通过“该数对应的下标”找到“它是第几个插入的数”,这两者是相互映射的。

2023-02-03 23:46:17 311

原创 高精度的加减乘除运算

由于基本的数据类型不能够存储高精度的大数,因此只能使用字符串来存储这样的大数。由于计算加减乘运算的时候是从最后一位开始运算的,因此存储的时候要倒着存储。除法是从第一位开始运算的,可以正着存储,但一般加减乘除是在一起的,所以一般都用倒着存储。高精度是指位数比较多的大数,一般位数在1000位以上,一般的数据类型不能保存这样大的数字,而高精度的加减乘除分别指两个大数的相加,两个大数的相减,一个大数乘以一个int类型的数,一个大数除以一个int类型的数。

2023-02-02 23:04:13 260

原创 迪杰斯特拉求最短路(dijkstra)

dijkstra算法是用来求解最短路问题的算法。一个有向图或者无向图,要你求出从起点到终点的最短路径。朴素的dijkstra算法:1.第一个点到起点的距离为零,到其他点的距离设为正无穷2.对每两个点的距离进行初始化,并去除一些重边或自环的问题3.有n个点,进行n次迭代,当t是距离最近的点,然后判断t是不是已确定最短路的点,如果不是,则将t加入到已确定最短路的点。4.用t来更新其他点的距离直至找到终点,则已确定最短路的点就是答案。如下图:迭代过程如下图:下面看一道例

2022-05-03 13:38:18 1330

原创 贪心-区间覆盖

贪心的概念:贪心算法是指对一个问题求解时,总是选择当前情况下对你最有利的选择,从而得到问题的答案。就例如一个贪婪的人,每次选择为当下对自己最有利的选择,所以又称为贪婪算法。有关于贪心算法的题没有固定的模式,因此有些题很难想到会用贪心的思想去解决。贪心算法求得的结果并非是全局最优解,因此利用贪心算法的思想来求得全局最优解时,要证明其思路的正确性,并且贪心的问题要具备无后效性,即当前这个状态的选择不会影响下一个或以后的状态,只与当前的状态有关。问题:区间覆盖问题描述:给定 N 个闭区间[ai,bi]

2022-04-29 12:40:43 686

原创 整数二分法

整数二分二分的本质是边界划分,给定一个区间,如下图,其中左半边表示满足某种性质,右半边表示不满足某种性质,可以通过这种性质来找到a,b这两个边界。1.找绿色边界(假设满足左边)令mid = (l + r + 1) / 2判断mid满足哪一个性质if(check(mid))当结果为true 时,mid满足左边的区间,则绿色边界一定在[ mid , r ]这个区间(包含端点),则更新为 l = mid;当结果为flase时, 则说明mid满足右边的区间,绿色边界则在 [ l

2022-04-14 16:09:36 408

原创 二进制中1的个数

给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。输入格式第一行包含整数 n。第二行包含 n 个整数,表示整个数列。输出格式共一行,包含 n 个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中 1 的个数。数据范围1≤n≤100000,0≤数列中元素的值≤输入样例:51 2 3 4 5输出样例:1 1 2 1 2可以用lowbit的应用:lowbit(x)返回的是x的最后一位1;即是利用x - (x &am

2022-04-14 14:01:46 109

原创 位运算符(基础)

位运算符是对二进制位进行操作的。& 按位与 [链接]:| 按位或 [链接]:^ 按位异或 [链接]:~ 取反 [链接]:<< 左移 [链接]:>> 右移 [链接]:下面讲左移与右移:左移:右移:基本就是以上情况下面是代码的相关演示:二进制的表示:...

2022-04-03 15:01:25 606

原创 差分与差分矩阵

差分:通过对差分数组的加减运算,再通过前缀和的方式,从而达到对一个数组或者矩阵数组的部分区域进行加减。数组的差分:输入一个长度为 n 的整数序列。接下来输入 m 个操作,每个操作包含三个整数 l,r,c,表示将序列中 [l,r] 之间的每个数加上 c。请你输出进行完所有操作后的序列。输入格式第一行包含两个整数 n 和 m。第二行包含 n 个整数,表示整数序列。接下来 m 行,每行包含三个整数 l,r,c,表示一个操作。输出格式共一行,包含 n 个整数,表示最终序列。

2022-03-24 22:26:38 948

原创 前缀和(一维,子矩阵的和)

1、一维前缀和题目输入一个长度为 n 的整数序列。接下来再输入 m 个询问,每个询问输入一对 l,r。对于每个询问,输出原序列中从第 l 个数到第 r 个数的和。输入格式第一行包含两个整数 n 和 m。第二行包含 n 个整数,表示整数数列。接下来 m 行,每行包含两个整数 l 和 r,表示一个询问的区间范围。输出格式共 m 行,每行输出一个询问的结果。数据范围1≤n,m≤100000,1≤l≤r≤n,−1000≤数列中元素的值≤1000输入样例:

2022-03-18 20:01:28 103

原创 递归算法()

递归算法就是一种自己调用自己的一种算法,可以进行多次相同的运算形式,例如求1—100的和,10的阶乘,还有斐波那契的第n项是什么等。直接利用解决相应的题目来,这样更容易理解递归算法。一、1—100 的和这种题型就是通过相应的同步的运算来一步步的进行计算,首先就是 可以变成100+1—99的和,然后1—99的和同样的可以变为99+1—98 的和,以此类推,直到最后变n=1的时候,结束传递,开始归来。#include <stdio.h>#include <stdlib.h&

2022-03-11 19:59:00 72

空空如也

空空如也

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

TA关注的人

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