自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Bellman-ford算法

要说求最短路径可以用之前学的Dijkstra,但是。

2026-08-30 23:43:19 566

原创 线性DP(入门)

定义。

2026-08-29 13:53:39 636

原创 Floyd算法(知识点+模板)

如果题目需要输出整张图的「点到点最短距离矩阵」,。

2026-08-29 10:12:53 546

原创 并查集(知识点+模板)

如果用普通数组、暴力遍历、DFS/BFS 反复跑,时间复杂度会直接爆炸。而就是专门解决「动态连通性」的。它代码极短、原理极简、效率极高,优化后时间复杂度接近常数,是竞赛、面试、工程中最实用的高级数据结构之一。

2026-08-28 11:13:32 292

原创 Dijkstra算法(知识点+模板)

生活场景比喻:你在小区A,要去城市各个地点(B/C/D/E),每条路距离不同。Dijkstra 就是帮你的智能导航算法。

2026-08-28 11:12:55 592

原创 2026第六次萌新赛

(库函数__gcd(a,b)while(b!= 0){ // b不等于0就循环// 取余数a = b;// b赋值给ab = t;// 余数赋值给breturn a;// b为0时,a就是最大公因数。

2026-08-25 19:53:08 232

原创 背包基础篇(01、完全、分组、多重、混合)

0~s 之间任意数目,都可以用若干个拆分出的数字相加凑出来。题意:先选出总价值最大的选法,统计一共有多少种这样的选法。背包容量 V,物品体积不超过 V,如果写成正序,就会变成完全背包效果,同一组可以重复拿多件,直接 WA。,然后正向循环回溯输出选择物品编号,用来输出 01 背包选的物品。,因为背包容量为0,是只有一种方案数,就是什么都不装。,没有物品可以选,全部是 0,全局数组自动初始 0。:总体积用了j,总重量用了k,可以获得的最大价值。件的物品,拆成若干个新物品,每个新物品代表一次性拿。

2026-08-25 09:55:00 354

原创 2026第五次萌新赛

题目让求最短时间,而全部燃烧完毕才算完成任务,可以把数组进行一个由大到小的排序,把耗费时间长的先燃烧,然后再去点燃后面的,点燃时间与燃烧时间相同,点燃的时间累加,然后再加上需要燃烧的时间,取其中的最大值。题目要求在区间内因子之和除以最大的因子的最大值,可以通过埃氏筛,如果一个数是因数,而这个数的倍数也是因数,可以开两层循环,外层模拟因数,内层依次加这个因数,,该问题转化为恰好装满的完全背包问题,把 16 个合法十六进制字符作为物品,物品重量为对应字符的 ASCII 码,字符可重复选取,使用。

2026-08-19 09:38:13 217

原创 高精度问题

高精度解决的问题:超出 long long 范围的超大整数运算存储方式:字符串读入 → 反转存入数组(低位在前)加法核心:逐位相加、记录进位减法核心:不够减向前借位、去前导零乘法核心:i,j 错位累积、统一处理进位,数组开双倍空间,防止数组越界输出方式:逆序输出数组。

2026-08-15 14:53:33 243

原创 2026第四次萌新赛

这道题是大数乘法,数字过大普通整型存不下,用字符串存储数字,模拟竖式乘法。函数,找到最大公约数,把坐标向量约分,并统一正负方向,把把下面的翻到上面,水平直线的都翻到正半轴,保证同一直线上的向量形式一致。这个刚开始想的是循环相乘,中间对10000取余,但是这样到后面的时候就是超时,然后通过一个个试样例发现,到后面输出的只是一样的,都是0313,然后就分情况输出。,目标求最大快乐值。,表示c里面有两个不同的点可以组成星对,计算同直线非原点组成的点对。,免费道具不占用预算,其余道具总花费不能超过给定预算。

2026-08-13 09:25:45 192

原创 2026第三场萌新赛

用n/2算出可以让多少负数变成正数并且排序,取绝对值最大的数,把所有的正数和从负数变成正数的数从最大开始相加就可以了。刚开始写题提交的时候,因为没有考虑负数的个数小于n/2的情况,导致发生数组越界的错误。由于n的取值范围非常非常的大,所以用字符串的方式输入,n的长度为1是,直接输出0和n就行了,否则算出各个位数上的和,让这个和一直算各个位上的和,直至剩下一位数。

2026-08-04 20:01:23 181 1

原创 二分算法(知识点+题目)

二分的数组具有单调性查找某个值是否存在:在数组a中查找猜一个答案mid,写函数,检查mid是否可行,找最大值的最小,或者找最小值的最大(最大值最小)(最小值最大)

2026-08-04 11:27:39 335

原创 二叉树和二叉树的遍历

树,就是一种的数据结构。,顺序不能乱。

2026-08-03 11:21:01 165

原创 map_计蒜客T1271 完美K倍子数组

寻找数组中任意两个两个数之和是 k 的倍数的最长完美子数组B选出最少 2 个数,满足 他们相加其和是K的倍数,找到满足条件的一组;

2026-07-25 22:12:31 322

原创 stack_力扣 739. 每日温度

给定数组,代表每一天的温度。对每一天,求出;如果之后不存在更高温度,填0。

2026-07-25 22:12:13 237

原创 set容器--AcWing5303 不同字符串数量,计蒜客 T1526 计算并集

容器内不存在重复元素,同一个数字多次 insert,集合里只保留一份自动去重,且会自动排序; 返回容器中现存元素总数。 的遍历输出,用迭代器正向遍历输出反向遍历输出输出最后一个元素也可以用 函数顺序下用二分查找 和 :≥x 的第一个元素:>x 的第一个元素二、AcWing5303 不同字符串数量题目要求输入 个字符串,输出一共有多少种互不相同的字符串。输出样例:样例解释给定的 5 个字符串中一共包含 3 个不同的字符串:、、。三、计蒜客T1526 计算并集题目要求

2026-07-24 13:52:38 340

原创 二分 洛谷P1824进阶奶牛(第一周)

农夫约翰建造了一座有n间牛舍的小屋,牛舍排在一条直线上,第i间牛舍在xi​的位置,但是约翰的m头牛对小屋很不满意,因此经常互相攻击。约翰为了防止牛之间互相伤害,因此决定把每头牛都放在离其它牛尽可能远的牛舍。也就是要最大化最近的两头牛之间的距离。牛们并不喜欢这种布局,而且几头牛放在一个隔间里,它们就要发生争斗。为了不让牛互相伤害。约翰决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是多少呢?

2026-07-24 11:33:13 237

原创 队列_滑动窗口【模板】(洛谷P1886)

有一个长为n的序列a,以及一个大小为k的窗口。现在这个窗口从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最小值和最大值。例如,对于序列13−1−35367以及k3窗口位置​最小值−1−3−3−333​最大值335567​​。

2026-07-21 20:04:06 418

原创 结构体数组(成绩排序)

先定义结构体,再定义数组struct Student{//定义结构体类型int id;//定义结构体数组,存3个学生定义结构体的同时直接定义数组struct Student{//定义结构体类型int id;}stu[3];//直接开长度为3的结构体数组。

2026-06-13 20:07:03 145

原创 01背包问题

问题:容量为v的背包, n件物品, 每件物品只有一件, 每件物品所占体积v, 价值w已知,求此背包所能容纳的前提下,让在其中物品价值最大。用动态规划的核心思想:1、把大问题拆成小问题2、用数组dp[j]记录:背包载重容量为 j 时,能装入物品的的最大总价值。3、对于每个物品,只有选与不选两种选择,要么不选:dp[j]不变;要么选:腾出重量,加上这个物品价值。

2026-06-06 11:25:21 327

原创 C++的位运算之位移运算符

位移<< 与 >>不改变原变量本身。<<=和>>=修改变量本身。int a=4;//二进制为100a<<1;//二进制为1000,转成十进制为8//输出4a<<=1;//二进制为1000,转成十进制为8//输出81<<k快速得到2的k次方n>>k正数快速得到n除以2的k次方。

2026-06-06 09:42:15 430

原创 C++的位运算之逻辑位运算符

位运算是直接操作二进制的运算,是C++中速度最快的运算之一。

2026-05-30 17:08:39 390

原创 C++ 二维差分

在二维数组的矩阵中,选中其中以(x1,y1)为左上角,(x2,y2)为右下角的子矩阵,让其中的每个元素都加上c。表示一个子矩阵的左上角坐标和右下角坐标。每个操作都要将选中的子矩阵中的每个元素的值加上。中不在子矩阵的那一部分的c,以确保只有在选中的子矩阵的元素加上c。初始全部为零,调用上方函数可构建出初始不加c的数组。然后再调用上方函数,可以构建出在要求的数组。个整数,表示所有操作进行完毕后的最终矩阵。要求的子矩阵上加上c的数组,用数组。的子矩阵加上c的数组。个整数,表示整数矩阵。列的整数矩阵,再输入。

2026-05-27 17:15:55 390

原创 C++一维差分

思路是b[l] + c再b[r+1]-c,首先让数组a中, a[l] 及以后的数都加上了c,但我们只要求l到r 区间加上 c, 所以还需要让 b[r + 1] - c,让数组a中 a[r + 1]及往后的区间再减去c,这样对a[r] 以后区间的数相当于没有发生改变。一维差分结论:给a数组中的[ l, r] 区间中的每一个数都加上c,只需对差分数组b做 b[l] =b[l]+ c, b[r+1] =b[r-1]- c。使得a[i]=b[1]+b[2]+b[3]+…

2026-05-21 12:42:21 32

原创 C++二维前缀和

输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1 , y1 , x2 , y2 ,表示一个子矩阵,(x1,y1)为左上角坐标,(x2,y2)为右下角坐标。对于每个询问输出子矩阵中所有数的和。定义两个二维数组,一个存矩阵的数字a[][][][],一个存和s[][]s[i][j]表示在二维数组中,左上角(1,1)到右下角(i,j)所包围的矩阵元素的和。

2026-05-20 13:51:58 164

原创 C++动态规划 DP(1)

动态规划把大问题拆成小问题,把小问题算出来用dp数组存起来,大问题用小问题解决,递推,不用重复算。

2026-05-15 16:33:19 254

原创 C++的素数筛

素数是大于1,并且除了1和它本身不能被其他自然数整除的自然数。最小的自然数是2,也是唯一的偶素数;

2026-05-15 11:34:52 168

原创 C++中string map和vector知识点

map是关联容器,map(key,value),以键值对的形式存储数据,其中每个键都是唯一的,表示不能有重复的键,如果想要插入一个已经存在的键,那么将会覆盖该键所对应的值。要输出元素,查找元素时用find方法,不要直接用下标。map的数据是有序的,能高效进行查找、插入与删除。map的键和值可以是任意类型。

2026-05-07 20:35:03 302

原创 逆序对与归并排序

两层循环,外层循环i是0到n-1,内层循环j是i+1到n,用i挨个跟j比,只要a[i]>a[j]的话,那么就加1,适合小范围,n小于1000。

2026-05-05 19:21:13 318

原创 生成随机数

【代码】生成随机数。

2026-04-30 20:24:33 195

原创 前缀和---快速求区间和

求区间[l,r]中元素的和:sum=s[r]-s[l-1],l是区间从第几个开始,r是区间从第几个结束,s[r]是数组a中前r个元素和,s[l-1]是数组a中前l-1个元素和,因为l也是也在区间中需要求和。定义存储数字的数组a,定义前缀和数组s,s[i]表示数组a前i个元素的和。

2026-04-29 19:54:20 109

原创 C++中字符串的反转与去重

1、用bool数组来记录字符有没有出现过,如果这个字符没有出现过,就加到结果里,并且标记为“已出现”,如果这个字符出现过,就直接跳过。1、用双指针法,左指针在开头,右指针在结尾,然后用循环交换两指针指向的字符,左指针右移,右指针左移,只至两指针相遇,循环结束。2、用C++中的反转reverse(s.begin(),s.end())函数。二、字符串去重:删掉重复的字符串。一、字符串反转:把字符串倒过来。2、排序后删除重复元素。

2026-04-26 10:18:30 238

原创 C++中字符串的查找与插入

1、用函数加循环查找2、用string中自带的find()

2026-04-20 23:18:49 343

原创 C++ vector容器的用法

6、逆序遍历(反向迭代器rbegin,rend),rbegin()指向最后一个元素,rend()指向第一个元素前的 位置。3、指定大小,设初始值:vector<int> v3(5,10)//5个10。2、at()访问(会检查越界):cout<<v.at(0)<<endl;4、直接初始化:vector<int> v4={1,2,3,4,5};3、直接赋值覆盖:vector<int>v={1,2,3};

2026-04-15 20:40:54 482

原创 STL标准模板库之算法

11、upper_bound:找第一个>目标值的元素,在有序容器中,找第一个大于目标值的元素位置,和lower_bound搭配使用,容器必须是升序排序。begin()是容器开头,end()是容器结束。sort(vec.begin(),vec.end(),greater<int>())//降序排序。

2026-04-08 18:27:03 332

原创 STL标准模板库之迭代器

/输出5,迭代器->成员函数,是(*it).size()的简写, 效果一样,更简洁。随机访问迭代器:像数组一样随便跳,支持it+n、it-n、it[n]、<、>、<=、>=。

2026-04-01 22:45:55 406

原创 STL标准模板库之容器

cout<<"栈顶元素:"<<st.top()<<endl;/*输出:李四:85。}//遍历输出(已经是有序,去重后的结果),输出:1 2 3。cout<<"第0个字符:“<<s[0]<<endl;cout<<"张三的分数:"<<score[“张三”]<<endl;cout<<"队首元素:"<<q.front<<endl;cout<<"出队后队首:"<<q.front()<<endl;

2026-04-01 13:09:56 302

原创 空间复杂度与数据范围

n小的时候,可以暴力,开二维数组,n大的时候,用一维数组或者O(1)。空间复杂度:程序运行时占用多少内存,用O(...)表示,可以理解开了多大的数组,存了多少变量。5.O(n*n):平方空间,空间占用很多,适用于二维数组,开a[n][n],空间是n*n。空间复杂度排序:O(1)< O(log n)<O(n)<O(n*log n)<O(n*n)1.O(1):常数空间,只用几个变量,不开数组,空间固定,适用于数学计算。3.O(n):线性空间,开了一个长度为n的数组,空间跟n成正比。

2026-03-25 13:58:29 34

原创 时间复杂度

比如一层循环跑一遍数据,O(n),数据变大10倍,程序只慢10倍;两层循环嵌套,O(n*n),数据变大10倍,程序会慢100倍,很容易超时。比O(n)慢一点,但依旧能处理1e5-1e6数据。没有循环,不管n多大,都只执行固定次数。每次把问题规模砍半,每次除以2,像二分查找,数据再大也跑得飞快。像两层for循环嵌套,n=1e4就会很慢,n=2e5直接卡死。一个for循环从头到尾跑一遍,n变大多少,时间就变大多少。4.O(n log n)线性对数级别。2.O(log n)对数级别。5.O(n*n)平方级别。

2026-03-23 07:18:48 40

空空如也

空空如也

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

TA关注的人

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