- 博客(17)
- 收藏
- 关注
原创 LeetCode_2438_对数的理解,前缀和,快速幂
这篇文章介绍了一个LeetCode问题的解法,题目要求将数字n拆分为最少数量的2的幂次方之和,并计算给定查询区间内元素的乘积。解题思路分为三步:首先利用bitset将n转换为二进制位,生成2的幂次方数组;然后通过指数前缀和优化区间查询计算;最后使用快速幂算法高效计算大数乘积。代码实现展示了完整的C++解决方案,包括预处理、前缀和计算和快速幂应用。该方法巧妙利用了二进制表示和数学性质,将问题转化为指数求和与快速幂计算,有效解决了大数取模的运算问题。
2025-08-11 16:02:18
373
原创 Codeforces Round1035 B.Line Segments_几何问题,简单拿下
聪明的你一定能想到,这其实是一个几何问题,我们可以把起点和终点之间的欧拉距离也放入数组a中,这样问题就变成了能否有数组a中的所有元素围成一个多边形,或者首位重合的线段。假设,起点和终点之间的距离为1,原本数组a中有,1,1,4,这样一来就变成了,1,1,1,4,我们发现这样根本就做不到围成一个多边形,或者首位重合的线段。题目的大致意思就是,在平面坐标系上,你有两个点,一个起点,一个终点,然后我们有一个长度为n的数组a,ai代表走到第i步时,必须和上一个点之间的。有疑问的小伙伴可以在评论区评论或者私信我。
2025-07-06 09:49:07
365
原创 Codeforces_2000F_详解_分组背包,贪婪,dp
有t组数据,每组数据先输入n和k,n表示接下来有n行数据,每行有两个数字a和b,代表一个矩形的两条边,内部有aXb个单元格,我们进行一次操作,将任意一个矩形的任意一个单元格上色,当一个矩形的任意一行或者一列都涂满后,得到1分,k为目标得分。我们可以求出每个矩形获得至少i分的最小操作数,记为v[i],因为上面说了,1*1的时候一次操作的2分,也就是说,v[a+b]和v[a+b-1]操作数是一样的。这样就可以在,同一个矩形内在最小化操作数之下,得到相应的分数,要特别强调的是,,每次图最小的得分即可。
2025-06-06 20:41:05
888
原创 Codeforces round 1027 div3 E_Kirei Attacks the Estate_树形dp_简单的交替和运算
我们可以写一个dfs函数,参数有当前节点x,父节点pre,父节点最大交替和mx,父节点最小交替和mn,之后从根节点开始递归即可,每个点只会遍历一次,无需记忆化。其实答案已经和显然了,因为我们当前节点的某个交替和的计算式一定会被其子节点用来计算,即然如此,那么能起到作用的一定是最大的交替和和最小的交替和。每个点到root的最短路径一共有m个节点,取其中的前k个节点的交替和(k至少为一)作为这个节点的最终分数。4节点能得到的最大值就是4,3,2的部分,答案为9。4节点到1节点最短路为,4,3,2,1。
2025-05-27 22:29:15
560
原创 Codeforces708A_Letters Cyclic Shift_字符串处理_脑袋一转,答案显现!
你有一个字符串,你要将挑选其中一段非空的子串(连续的),并将他们的字母序列减一,就是b->a,c->b等,特别的a->z,求出字典序最小的字符串。
2025-05-26 22:25:39
215
原创 洛谷p3957跳房子_二分+dp+单调队列_三重打击之下,轻松解决~
简单来说就是坐标轴(只有横轴)上,有n个点,每个点有个分数数,机器人每次只能跳到d+i的位置上(假设跳跃前的位置是 i ),并拿到它上面的金币,也可以改造机器人的跳跃能力,改造规则为:你可以花费g的金币数跳跃变为距离变为 [d-g,d+g],当然,d-g>=1用最少的金币数来到达目标分数。
2025-05-25 22:09:04
1526
原创 力扣leetcode3551_连通块计算_数圈圈
我们可以将数据所需的指标计算出来,记为 sum[ ],ind[ ]记录每个数字原本的顺序,然后sort排序(重写比较函数),此时ind里面的就是排完序后的数字顺序。,读者可以自行求证一下,然后每个连通块的交换次数最少为——其内部点的数目-1,所以上述的交换次数为4。至此,每一个位置都看过了,对于上述的每一个都是一个连通块,只有在一个块内部的交换才是有效的,0的位置是4,去看4的位置,是0,那么0,4是一个块里面的,2的位置是5,5的位置是6,6的位置是2,1的位置是3,3的位置是1,
2025-05-18 22:25:12
652
原创 CF780C_Andryusha and Colored Balloons_染色盘_染色问题_dfs类似问题
n个节点n-1条边的无向图,保证连通(就是一棵树),要给所有点染色,图中任意3个直接连通的点所用的颜色不能相同,n最多2*1e5个点,要求用最少的颜色种类来染色,输出所有点的颜色情况,任意一种即可。
2025-05-16 22:31:38
762
原创 洛谷P4155国旗计划___倍增_轻松解决~!
四种颜色代表四个士兵,很明显题目可以简化成一个环,如果一段必须选择,那么最少应该选择几段可以将整个环全部覆盖,为了方便解答,我们将数据的按照左端点由大到小排一下序,我们定义一个数组g [ i ] [ j ] ,表示 i 处的士兵经过2^j步到达可以到的下一个士兵的区域,以此来进行倍增,但是我们发现它会循环,所以我们把l和r比价,适当的将r变为r+m,再将排序后的n个点复制一份到数组尾部,之后更新数组g即可,得出答案。这是题目样例的简单示意图。可以简单看一下这个。
2025-05-11 20:31:50
472
原创 dp+单调队列,多了一条判断而已,不必大惊小怪~___洛谷p3572_PTA-Little Bird
观察转移式,如果老老实实按照这样写,就是一个n^2的时间复杂度,肯定是过不了的,所以使用单调队列优化,但这次的比较条件有所修改,不能简简单单的比较大小,还要比较转移前的高度,简单总结一下题目信息,也就是鸟儿每一次都可以飞到距离它1——K距离的一棵树上(不超边界),如果下一颗树大于等于当前树的高度,就会加1疲劳值。我们可以反过来思考一下,鸟可以飞到i+1到i+k,那么每一棵树是不是可以被鸟从i-1到i-k而来,也就是i的状态是由i-1到i-k决定的。,这个就是一个重点,之后就是正常流程了,上代码~
2025-05-10 12:45:25
277
原创 对于距离的把控,猫鼠游戏而已,拿下~
1也就是Alice,成为A点,相对的,Bob也就是B点,B想跑的久一点,A想快速结束游戏,那么A一定会跟在B之后,所以说我们就可以通过对A和B点的到达其他点的单源最短路dis。我们要找到终点,我们可以观察样例,这个终点有一个性质,即B到它的距离小于A到它的距离,这样才能满足B慢A快的条件,然后我们找到这么一个最大点即可。其实结合着题目上的样例我们就能简单看出就是一个猫鼠游戏,1点去抓x点。解决了第一步,那么如何得出答案呢?
2025-05-08 16:50:23
178
原创 洛谷p2627_dp+滑动窗口,领域展开!!!
数组f表示从第一位,到 i 的位置的最大值,i - j + 1 <= k ,因为要保证每一段子数组都不超过k的长度,所以加上f [ j - 2 ] ,sum[ i , j ]写成sum[ i ] - sum [ j - 1 ] (这个题上来第一眼就是dp来做的,先简单的思考一下递推式,对于每一个数字来说,如果在k的范围内,就是选或者不选,然后更新k,或者开下一个k,因为我们会选一个区间和,所以会用到前缀和。时间复杂度是n*k,显然是过不了的,所以的去优化。不选:f [ i ] = f [ i - 1 ]
2025-04-13 12:16:35
351
原创 CF1791F__我有一个集合,我有一个查询,啊!~,集合查询
比如说索引1,2,3,4,5,当索引4处的数字不会变化时,我们就可以将它移除,整体变成1,2,3,5,此时还能变化的索引的数量就少了些许,但是还有一个问题,整体的索引的位置都变了,该如何找到L和R呢?因为题目中涉及到了多个的区间操作,所以可以用线段树或者是树状数组,但在这里我们就不采用那样的方法了(主要是我也不太会T^T),这里我们使用一种有关于集合的方法。因为每次操作一个数的时候都会使它变小,除非它就一位数,换而言之,如果一个数就一位数,你怎么操作它都不变,这时我们就可以不对它进行操作了,进而节省时间。
2025-04-10 09:20:18
243
原创 对于Stack的理解!
这道题目纯粹就是对于栈的理解和使用,a数组中的前k个数字,依次放入栈s中,可以边放边取,使取出的顺序是一个自然递增的序列即可,使a的字典序列最大。第一点:栈中不可以出现栈顶大于栈顶之下的元素,因为这样就不能保证,输出正确的序列。因为我们要获取栈顶的元素以及栈顶之下的元素,所以我们可以采用数组来模拟栈。第二点:根据栈中的两个元素之差来倒序输出nums即可。
2025-04-05 20:58:45
190
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅