自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数字串(权值思想和字符串哈希)

首先我们考虑加号放在哪里会使相加的和最大,我们不妨假设是一个大的字符串加上的都是单个的数最大。比如abcde,我们要放置两个加号,我们假设a+bc+de最大,那么我们可以想一想会不会有比它更大的,最大字符串位数是三位数的。我们可以举一个例子,a+b+cde,我们把两个数相减,a+b+cde-(a+bc+de)=c*100+b-b*10-c=99c-9b>0,所以无论我们认为哪一个字符串分割之后可以是多个不是单个字符的数最大,我们总能找到一个符合条件的更大的。4.a=b,b=c,c=d,d>e,两式相等。

2023-09-24 13:42:00 146

原创 怪兽(二元二次方程计算)

用于检查给定的u值是否满足方程组的整数解条件。它首先检查两个条件,确保两个方程中的y和x都是非负的。然后,如果n2等于n1,它直接计算x和y的值,并检查x+y+u是否等于p。如果n2不等于n1,它会计算y和x的值,并再次检查x+y+u是否等于p。程序通过遍历查找的方式,在[0, p]的范围内搜索u的值,使得上述方程组有整数解。如果存在这样的u,那么程序会输出u的最小值和最大值;其中,x, y, u是未知数,p, q, n1, n2, n3是已知的常数。没啥好说的, 枚举n3,验证,结束!

2023-09-22 23:24:30 166

原创 跑步(排序和动态规划单调栈思想)

【代码】跑步(排序和后缀和)

2023-09-22 01:55:51 55

原创 夏日漫步(简单bfs)

简单的bfs,就是相同的亮度的砖块可以直接瞬移到下一块,这是和经典bfs的不同之处,如何处理相同亮度的砖块作为下一步的移动目的地成为这道题的关键点。在这一点上,我用了一个vector数组存储相同亮度的砖块,然后在读取存储的vector去写入ne数组,ne数组代表当前下标可以移动到的下一个相同亮度砖块的下标。

2023-09-20 23:00:45 226 2

原创 糖果促销(树状结构)

我们可以贪心的想,当参与糖皮换糖的糖果越多,那么花费将越少,购买的糖果就会越少。参与糖果换糖的数量一定可以构成完全p叉树,那么问题就可以转化为那么在k的结点范围内构成的最大的完全p叉树即是最大糖果参与数。那么叶子结点就是我们需要买的糖果数,而未参与糖果换糖的肯定是需要我们单独出钱买的,加上就是我们需要买的所有糖果数。代码的主要思路是将参与糖皮换糖的糖果数量构造成一棵p叉树,树上的叶子节点是需要购买的糖果数。程序通过计算最大能构成的满p叉树的节点数和叶子节点数,来确定需要购买的糖果数量。

2023-09-19 23:10:39 160

原创 星际航行(贪心算法,我感觉二分也是可以的,但是没有实现思路)

我们可以考虑一维坐标下,当只有三个飞船的时候我们可以发现只有当两边的飞船向中间的飞船移动移动可以使总体移动距离最少,推广到n个飞船,也是都聚集在中点的坐标可以使移动距离最短。在x轴,y轴和z轴排列直线时,那么飞船移动后的其他两个维度必然相等,也就是以各个维度的中间点作为聚集点。//需要注意当n为偶数我们取arr[n/2]为中间点,其实arr[n/2]和arr[n/2+1]之间的所有点都是可以的。//arr上的各个点向中间点靠拢的移动距离之和。//arr上的各个点到point点的距离之和。

2023-09-18 23:06:31 152

原创 第五维度(二分及前缀和)

我们首先用二分去枚举时间点,使用check去检查这个时间点是否能满足要求,即无论删除哪一个人始终在这个时间点下的贡献度之和都大于等于m,那么在这个时间点肯定是能达到五维世界的。这段代码是一个解决特定问题的程序。它的目标是确定一个科学家群体能否在一定时间内理解五维概念,并找到理解五维所需的最短时间。经过昨天的折磨,今天写这个二分加前缀和真的得心应手,嘿嘿,小小得瑟一下。函数的实现,它们共同决定了找到最短理解时间的效率。这个程序的核心是二分查找算法和。时间复杂度为O(NlogN)

2023-09-16 23:40:18 47

原创 蛋糕划分(二维前缀和,二分,位运算)

这段代码是一个切割蛋糕的问题,其中蛋糕被表示为一个二维数组,每个元素代表蛋糕的一部分。目标是找到一种切割方案,使得切割出的蛋糕块的数量不超过k,并且每块蛋糕的重量最大不超过m。代码的主要思路是使用二维前缀和来快速计算蛋糕子矩阵的重量,并使用位运算枚举所有可能的横切方案。对于每一种横切方案,代码使用动态规划来确定竖切的位置,以最大化每块蛋糕的重量。第一想法是dfs,但是dfs枚举当前位置切与不切,以及每次枚举都要进行计算当前枚举的的蛋糕的最重的蛋糕块,时间复杂度可以达到。最后,代码输出最小的m值。

2023-09-16 14:29:25 243 1

原创 公园(复习邻接表法表示图以及bfs)

可以考虑将两个人的位置看成一个状态,但是分析一下,40000*40000会tle,所以就没有写那种方法。这个方法是通过bfs分别求出地图上的每个点到我们bfs对象的最短路径。然后我们枚举每一次小度和度度熊的相遇结点,计算出体力消耗,取最小值即可。

2023-09-14 22:48:41 52 1

原创 推箱子第二部分(两次bfs)

因此先对箱子做bfs,相应的对人做bfs,确实有点难,一整个看不懂可以一部分一部分的看,首先把问题拆解,第一个问题是一个人从start位置开始走到end位置,这是一个经典又简单的bfs,然后写箱子从start到end,但要通过人的bfs判断是否箱子可以有这样的走法。一直改bug到现在,幸亏最终还是过了,不然真就通宵了,,,,室友都睡了,抓紧时间发文章,坚持一天一篇。函数,执行广度优先搜索,以找到箱子到达目标位置的最短路径。函数,执行广度优先搜索,以找到从人当前位置到目标位置的最短路径,同时避免箱子的位置。

2023-09-14 01:15:00 36 1

原创 推箱子第一部分(一个人从起点走到目的地,不能经过箱子和墙体)

这道题有点难度,因此我准备分解为两篇文章进行描述,这一篇是简单的bfs,判断一个人是否能从start点走到end点,且不能经过box和墙体。并且把路径存到seq中,并返回bool值。

2023-09-12 23:21:31 85

原创 摘花生(dp和bfs)

我们从左上角开始,每次搜索它的右边和下边位置,如果新的位置在数组内并且路径和更大,我们就更新该位置的路径和,并将新的位置加入队列。第一个代码片段是一个动态规划(DP)问题,它主要解决了一个二维数组中的路径最大值问题。主要的思路是,对于数组中的每个位置(i, j),它的最大路径和来自于它的左边位置(i-1, j)或上边位置(i, j-1)的最大路径和加上当前位置的值。第二个代码片段是广度优先搜索(BFS)问题,也是解决二维数组中的路径最大值问题,但是与DP不同,BFS是通过搜索的方式找到最大路径和。

2023-09-11 22:55:15 69

原创 方格取数(滚动数组优化dp)

【代码】方格取数(滚动数组优化dp)

2023-09-10 22:02:50 53 1

原创 亲戚(并查集路径压缩)

函数用于查找元素所在的集合。如果元素u的父节点不是它自己,那么就递归查找u的父节点所在的集合,直到找到一个父节点是自己的元素,这个元素就是u所在的集合的代表元素。在每次查找时,都会直接将该元素的父节点设置为该集合的代表元素,这样可以减少后续查找的时间。最后,这个程序使用到了路径压缩(Path Compression) 优化方法,这可以让并查集的操作接近O(1)的复杂度。并查集模板及路径压缩写法。并查集的实现主要通过。

2023-09-10 20:32:41 25 1

原创 智商药(二分查找以及动态规划)

总结:该代码通过动态规划和二分查找等算法,求解某种特定问题。输入包括两个整数和两个数组,输出为一个长整型结果。//第一个右边界小于a[i].l的药的序号。//第一个右边界小于a[i].r的药的序号。

2023-09-09 20:01:14 42 1

原创 选人(组合数)

总体来说,这段代码的功能是计算满足一定条件的概率值。根据输入的n、m和h,它计算出一个特定的概率,并输出结果。

2023-09-09 19:18:34 18 1

原创 无线网络(double类型变量的二分查找)

如果结果向量的大小达到3,则返回false,因为这意味着我们需要一个更大的圆来覆盖所有的点。在函数最后,如果结果向量的大小小于3,则用0填充它。这表示我们需要一个更小的圆来覆盖所有的点。需要注意的是,这个代码只考虑了x坐标,而没有考虑y坐标。如果点不在一条直线上,这个代码就不能正确地找到一个最小的圆来覆盖所有的点。,并通过不断二分这个范围来逼近最小的半径。每次检查圆心是否能覆盖所有的点,如果可以,则缩小搜索范围为。是否足够覆盖所有的点。来获取覆盖所有点的圆的三个点的坐标。输出最小的半径和三个点的坐标。

2023-09-09 10:47:08 30 1

原创 更小的字符串(数位dp,pow函数使用细节)

1.此题不能用使用快速幂计算每一次的pow函数。因为此时复杂度为n2,如果使用动态规划可以使时间复杂度将为n。2.库函数中的pow函数参数是double,返回值也是double。

2023-09-08 22:50:27 26 1

原创 无限区域(PI的表示)

acos(-1)可以在double精度表示Π的值。

2023-09-08 16:03:28 37 1

原创 病毒(bfs常数优化)

效果一样,但是判断之后可以少一步队列的放入操作,大大减少常数时间的计算量。

2023-09-07 23:23:04 24 1

原创 冰壶(cmp比较器的使用)

主要是举一个使用sort函数比较器的方法(比较结构体的方法)。

2023-09-07 21:58:23 42

原创 快乐子数组(前缀和及单调栈)

这道题主要用到一个数学知识,怎样利用前缀和去计算,数组中的每一个值依次乘以等差数列中的每一项的和。总的来说,这个程序通过使用栈来维护最大值的位置,然后根据题目要求进行相应的计算,最终得到结果。则设R=na1+(n-1)a2+(n-3)a3+......+an;//i要向前取一位来保证数组中的第一个数被统计到。例如 已知a1+a2+a3+......+an=A;//前缀和的每一项分别乘以一个等差数列的一项。首先,包含必要的头文件并定义一些常量和类型。所以R=(n+1)B - A;可得A+R=(n+1)B;

2023-09-07 21:12:11 45 1

原创 拼接数组(dp)

为以索引为结尾的最大字串和、当前位置为结尾的最大和以及当前位置为开头的最大和中的最大值。//以arr[j]为结尾的和最大字串。到1,依次计算以每个位置为开头的最大和,并更新。* 计算以该元素为结尾的最大字串和,并更新。* 更新以当前位置为结尾的最大和,并更新。* 将该元素与当前位置的和相加,并更新。b. 从标准输入读取数组元素的长度。,依次读取每个数组元素并将其存储在。a. 从标准输入读取查询的索引值。c. 创建一个循环,从1到。e. 再次创建一个循环,从。8. 创建一个循环,从0到。

2023-09-07 16:13:39 26 1

原创 魔法百合井(dp优化n2->nlongn)

相较于一般的dp是由哪个状态更新此时的状态,优化后的dp是由此时的状态可以更新哪个状态。

2023-09-07 00:00:49 37 1

原创 电(记忆化搜索且卡cin)

在深度优先搜索函数中,对于每个节点,首先判断该节点是否已经被访问过,如果已经访问过,则直接返回该节点的路径和;否则,遍历该节点的所有相邻节点,对于相邻节点,如果相邻节点的值大于当前节点的值,则递归调用深度优先搜索函数,并将路径和加上递归返回的结果。最后将当前节点的路径和更新为最大的路径和。//ne由头节点下标寻找下一个相邻节点的下标作为下一个头节点。//稀疏图使用邻接表。

2023-09-05 23:24:05 37

原创 5037.区间异或(线段树)

线段树int n,m;int a[N];int l,r,d;} tr[4*N];i

2023-09-04 20:36:17 49

原创 5034. 配对

bool st[N];int n;int d,a,b;if(d!cin>>n;i>a[i];heap.pop();continue;continue;break;i++) {return 0;

2023-09-03 21:00:28 46

空空如也

空空如也

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

TA关注的人

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