- 博客(75)
- 资源 (2)
- 收藏
- 关注
原创 【数据结构】树状数组C++详解
树状数组是一种支持单点修改和区间查询,代码量小的数据结构。你会说:线段树不是也能单点修改和区间查询吗,而且加上懒标记还能区间修改呢?但是树状数组的代码要远比线段树短,时间效率常数也更小,因此仍有学习价值。如果你想学习线段树的话:点击->线段树C++详细讲解和个人见解假设有这样一道题:已知一个数列 a,你需要进行下面两种操作:给定 x, y,将 a[x] 自增 y。给定 l, r,求解 a[l \ldots r] 的和。其中第一种操作就是「单点修改」,第二种操作就是「区间查询」。
2023-10-15 18:00:35
587
原创 最小生成树kruskal算法_C++详解
一个连通无向图的生成子图,同时要求是树。也即在图的边集中选择n−1条,将所有顶点连通。:我们定义无向连通图的 最小生成树(Minimum Spanning Tree,MST)为边权和最小的生成树。
2023-10-06 14:21:32
489
原创 spfa算法_C++详解
SPFA算法的全称是:Shortest Path Faster Algorithm,该算法是西南交通大学段凡丁于1994年发表的,它可以在O(kE)的时间复杂度内求出源点到其他所有点的最短路径,其中k为所有顶点进队的平均次数,可以证明k一般小于等于2,可以处理负边,但无法处理带负环的图(负环和负边不是一个概念)。
2023-10-05 20:42:50
1070
原创 保护花朵(选择性贪心)C++详解
问题 B:(密码:djlhql2023)时间限制: 1 Sec 内存限制: 128 MB提交: 168 解决: 193File Name:[提交][状态][题目描述]约翰留下了 N 只奶牛呆在家里,自顾自地去干活了,这是非常失策的。他还在的时候,奶牛像往常一样悠闲地在牧场里吃草。可是当他回来的时候,他看到了一幕惨剧:他的奶牛跑进了他的花园,正在啃食他精心培育的花朵!约翰要立即采取行动,挨个把它们全部关回牛棚。
2023-09-30 15:43:24
272
原创 C++数学知识模板
共 n 行,其中第 i行输出第 i 个正整数 ai 是否为质数,是则输出。给定 n个正整数 ai,判定每个数是否是质数。接下来 n行,每行包含一个正整数 ai。第一行包含整数 n。
2023-08-09 09:45:55
169
原创 C++ __builtin_popcount函数作用
_builtin_popcount函数是系统自带的一个返回值是int/long/long long二进制'1'的个数的函数。拿__builtin_popcount(unsigned int n)举个例子。
2023-08-02 20:30:11
1104
原创 线段树C++详细讲解和个人见解
或者这种题大家一看就知道打暴力,但是一看数据范围就知道只能得部分。我们之前学过的算法可以解决区间求和的问题,并且是O(1),但如果涉及到操作,前缀和都需要重新计算,时间复杂度也是O(n).那么有没有什么东西能兼顾两者呢?这就是我们要学习的把修改和查询的时间复杂度都降到。
2023-05-27 16:24:20
849
2
原创 AcWing 101场周赛第二题栈题解
所有测试点满足 1≤n≤2×105,每个给定字符串的长度范围 [1,10]。所有操作完成后,请你按照从栈顶到栈底的顺序,依次输出栈内所有元素。接下来 n 行,每行包含一个由小写字母构成的非空字符串。按照从栈顶到栈底的顺序,依次输出栈内所有元素。前 55 个测试点满足 1≤n≤10。你需要依次进行 n 个操作。给定一个栈,初始时栈为空。第一行包含整数 n。
2023-04-29 20:30:25
124
原创 C++动态规划模板汇总大全
1.背包模型2.状态机模型3.状态压缩DP4.区间DP5.树形DP6.数位DP7.单调队列优化DP8.斜率优化DP(因为我还没学,所以暂时不更新,请见谅)
2023-04-29 14:07:41
1892
2
原创 AcWing 4877. 最大价值
和多重背包特别像,s就是l / h;n++就行了acwing5。满足以上所有条件的前提下,所有装入物品的总价值尽可能大。种物品:重量忽略不计,在装入时没有重量限制。第 1∼m种物品:第 i种物品的单个重量为 h。所有装入物品的总体积不得超过背包容量。,如果该种物品的装入总重量超过 l。所有存在重量限制的物品均不得超重。一个整数,表示总价值的最大可能值。现在,请你挑选物品装入背包,要求。种物品,每种物品都有无限多个。第 i 种物品的体积为。输出总价值的最大可能值。行,每行包含四个整数。
2023-03-25 20:20:06
213
2
原创 AcWing1049.大盗阿福题解
dp模型——状态机模型C++详解1049. 大盗阿福阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。这条街上一共有 N家店铺,每家店中都有一些现金。阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃。他想知道,在不惊动警察的情况下,他今晚最多可以得到多少现金?输入格式输入的第一行是一个整数 T,表示一共有 T组数据。
2023-03-05 19:54:05
559
原创 dp模型——状态机模型C++详解
状态机顾名思义跟状态有关系,但到底有什么关系呢。在实际解决的时候,通常把状态想成节点,状态的转换想成有向边的有向图,我们来举个例子。相信大家都玩过类似枪战的游戏(没玩过的也听说过吧), 他的每一个人物基本都有几个状态:站立,蹲下,跑步和射击。这就可以构成一个简单的状态机图了。状态机模型我们拿例题来分析一下。
2023-03-05 19:48:30
1261
3
原创 AcWing 1012. 友好城市
AcWing 1012. 友好城市Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故。编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航线不相交的情况下,被批准的申请尽量多。输入格式第1行,一个整数N,表示城市数。
2023-02-22 10:28:00
288
原创 AcWing 482. 合唱队形
482. 合唱队形N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的K位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为12…K,他们的身高分别为T1T2TK, 则他们的身高满足T1…>TK(1≤i≤K)。你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。输入格式输入的第一行是一个整数N,表示同学的总数。第二行有N。
2023-02-22 09:42:28
294
原创 AcWing1014. 登山
五一到了,ACM队组织大家去登山观光,队员们发现山上一共有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。然后根据状态表示的特性,将两个状态的值相加,取一个 Max 就是 先上升后下降的最长子序列的长度。队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?这种边界情况一样是先上升后下降的最长子序列的子集,因此不用额外讨论。
2023-02-22 08:46:24
166
原创 AcWing 1017. 怪盗基德的滑翔翼
第二行包含N个不同的整数,每一个对应一幢建筑的高度h,按照建筑的排列顺序给出。有一天,怪盗基德像往常一样偷走了一颗珍贵的钻石,不料却被柯南小朋友识破了伪装,而他的滑翔翼的动力装置也被柯南踢出的足球破坏了。而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。于是,对于任意位置 x,我们分别需要求出以他为右端点的最长上升子序列,以及作为左端点的最长下降子序列。他希望尽可能多地经过不同建筑的顶部,这样可以减缓下降时的冲击力,减少受伤的可能性。
2023-02-21 16:27:29
396
原创 AcWing算法提高课1.1数字三角形模型全部题解
AcWing1015.摘花生AcWing1018.最低通行费AcWing1027. 方格取数AcWing275. 传纸条
2023-02-21 16:07:54
141
原创 AcWing275. 传纸条
班里每个同学都可以帮他们传递,但只会帮他们一次,也就是说如果此人在小渊递给小轩纸条的时候帮忙,那么在小轩递给小渊的时候就不会再帮忙,反之亦然。小渊和小轩希望尽可能找好心程度高的同学来帮忙传纸条,即找到来回两条传递路径,使得这两条路径上同学的好心程度之和最大。从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者向左传递。列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。输出一个整数,表示来回两条路上参与传递纸条的学生的好心程度之和的最大值。
2023-02-21 16:03:13
372
原创 AcWing1027. 方格取数
f[i1,k−i1,i2,k−i2]→f[k,i1,i2]:两个小朋友同时走k步,从(1, 1), (1, 1)走到(i1, j1), (i2, j2)能获得的最大花生数目.f[i1, j1, i2, j2] : 由摘花生问题可以推广出从(1, 1), (1, 1)走到(i1, j1), (i2, j2)能获得的最大花生数目.f[i1−1,j1,i2−1,j2]→f[k−1,i1−1,i2−1]:代表两个小朋友都走了k−1步,小朋友1要从(i1−1,j1)所以需要判断(i1,j1),(i2,j2)
2023-02-21 15:42:56
450
原创 AcWing1018.最低通行费
也就是,f[i][j] = max(f[i - 1][j], f[i][j - 1]) + w;而第 i 层的答案只依赖于第 i 层和第 i - 1 层,容易想到滚动数组优化。一维转移:f[j] = max(f[j], f[j - 1]) + w;f[i][j]表示从左下角到位置 [i,j]的最小值。而在经过中间的每个小方格时,都需要缴纳一定的费用。的正方形的网格,去参加一个非常重要的商务活动。的正整数,为网格上每个小方格的费用。输出一个整数,表示至少需要的费用。他要从网格的左上角进,右下角出。
2023-02-21 11:53:29
475
原创 AcWing1015.摘花生
题目大多要求的是Max/Min/数量...那么、状态如何划分的呢?y总说状态划分这东西不是凭空捏造出来的、是你积累的题目中见的多了、自然而然就知道如何去解决了。借用集合的思想、对这个题目进行分析、那本题要求的正是从左上角(1,1)到右下角(i,j)的路线中、花生数最大的那一条。可以发现、本题路线一共有两种、一种是从上面下来的、第二种是从左边过来的、那么我们就可以根据这个特点进行状态划分。分析的时候有点难度、不过输出的时候答案就简单了、我们所要求的不正是开始输入的那个n和m么。1:状态表示,2:状态划分。
2023-02-20 11:21:15
419
原创 高精度除法【c++实现】超详细讲解
高精度除低精度,原理是模拟竖式除法,和高精度其他算法一样都可以手动计算来感受一下实现方法。下面来一个较为简单的例子:1532 ÷ 21 = 72......20。高精度算法分为两种,高精除以低精和高精除以高精。不要看都是除法,就认为原理类似,其实是有很大差距的。让我们一起来学习吧!有句话说在前面,如果除数等于0,就不要算了,不成立。
2023-02-14 09:06:18
2877
5
原创 前缀和C++超详细讲解(有例题)
,会TLE的很惨,但是我们有没有想过用一个s数组,s[i]表示从1-i的a的和,s[i] = a[i] + s[i - 1]。这样l-r的和就是s[r] - s[l - 1]的值了,时间复杂度瞬间减少,变成O(2 * n)。紫色表示(x-1,y-1)前缀和,用sum[x-1][y-1]表示。到这里,你已经学会了前缀和。蓝色表示(x,y-1)前缀和,用sum[x][y-1]表示。黄色表示(x-1,y)前缀和,用sum[x-1][y]表示。红色点表示(x,y)前缀和,用sum[x][y]表示。
2023-02-13 16:39:37
653
转载 C++ STL之vector详解
注意:一维数组的下标是从0 00到v . s i z e ( ) − 1 v.size()-1v.size()−1,访问之外的数可能会出错。迭代器法: 类似指针一样的访问 ,首先需要声明迭代器变量,和声明指针变量一样,可以根据代码进行理解(附有注释)。在局部函数中开vector数组,是在堆空间里面开的,与开全局变量比较类似,所以经常见到在局部函数中开大容量数组。注意: end()返回的是最后一个元素的后一个位置的地址,不是最后一个元素的地址,以上 O(n),O(1)说的是时间复杂度。
2023-02-10 15:17:28
1052
原创 深搜的剪枝技巧C++详解
众所周知,搜索的算法时间复杂度大多是指数级的。即使是简单的不加优化的搜索,其时间效率也低得让人无法忍受,难以满足我们竞赛时对程序的运行时间的要求。所以建立算法结构之后,有一种对程序进行优化的基本方法——剪枝。所谓剪枝,就是通过某种判断,避免不必要的的遍历过程,形象的过程。
2023-02-06 11:03:35
2211
2
原创 C++ exp()函数用法
exp函数exp,高等数学里以自然常数e为底的指数函数,它同时又是航模名词,全称Exponential(指数曲线在医药说明中,EXP是指使用期限,即Expiry date(Exp date)。除此之外,EXP(Expedition) 是世界著名项目管理软件供应商美国Primavera公司的主要产品之一,是国际规范的施工管理和合同及建设信息管理软件。exp还指行业软件的高级专家版,在灵活性和功能上比专业版(pro)更加强大,也更加复杂。
2023-02-01 18:14:57
8219
原创 acwing86场周赛题解(模拟,dp,数学推导式)
而且,三种运动是循环训练的,也就是说他第一组训练是胸部运动,第二组训练是二头肌运动,第三组训练是背部运动,第四组训练是胸部运动,第五组训练是二头肌运动......以此类推直到做完第 nn 组训练。因为他是三个一循环,所以如果本次%3 = 0,就说明他在做背部运动,如果%3 =1,那么他一定是在做胸部运动,如果%3 = 2,那么他一定是在做二头肌运动。所有测试点满足 1≤n≤1051≤n≤105,1≤m≤min(105,n2)1≤m≤min(105,n2),1≤xi,yi≤n1≤xi,yi≤n。
2023-01-17 20:33:09
426
原创 高精度减法【c++】超详细讲解
大家学过高精度加法之后,可能已经知道高精度减法的实现方法了吧如果你还没有学过高精度加法的话,请点击这里(很详细的)—>
2023-01-16 20:53:30
1842
原创 高精度加法【c++实现】超详细讲解
大家一定都知道int和long long是有极限的(如下表),如果超了就无法计算正确结果了,那该用什么方法来计算呢?这就是我们今天要说的算法———高精度算法。如果这一位大于9,那么就把他的上一位加1,本位mod10。正常我们列的加法算式是这样的(如下图),这也是我们的期待方式,但是计算机能识别吗?但是这样的代码不仅时间复杂度高,而且代码还十分复杂。如果我们正常遍历,从0开始的话,就会变成这样子(如下图)。这显然与我们的正确答案224相距甚远,肯定不是这样的。
2023-01-14 14:06:41
2410
3
原创 acwing第84场周赛(4788,4789,4890)题解
如果将该序列从小到大排序,则可以得到另一个长度为 nn 的正整数序列 b1,b2,…,bnb1,b2,…所有测试点满足 1≤n≤1051≤n≤105,0≤hi≤230≤hi≤23,0≤mi≤590≤mi≤59。接下来 nn 行,每行包含两个整数 h,mh,m,表示一个客人在 hh 时 mm 分进入商场。2.把这个时间对应的数组元素计数, 也就是cnt[t]++,是客人在这个时间来的人数。,ana1,a2,…,ana1,a2,…一个整数,表示在同一时刻(精确到分钟)进入商场的最大客人数量。
2023-01-06 14:45:22
704
1
小熊猫devc++下载包
2023-09-30
C++广度优先搜索一本通习题
2022-08-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人