- 博客(23)
- 问答 (1)
- 收藏
- 关注
原创 CF2179D Blackslex and Penguin Civilization
我们可以发现方案的总集合其实就是n个里面选n-k个(假设到了选k个1的情况)为0,其余的为1,然后我们把为0的位置做一个排列,这样就保证了最大,而要保证字典序最小,则一定选择高位为0。上述过程体现了贪心策略:每一步在保证后续仍能取得最大总贡献的前提下,选择当前可行的、字典序最小的数。,2n−1这 2^n个数排列成一个序列,使得该序列的前缀。的个数恰好比前一个数少 1 的数。放在序列开头是最优的,否则总贡献会减少 1,而且这也能确保后续有更多可行的衔接方案。以 n=3n=3 为例,需要排列的数为二进制下的。
2025-12-24 14:21:23
382
原创 CF1043DIV3 D From 1 to Infinity
摘要: 题目要求计算由连续整数拼接而成的无限序列前k位数字的各位数字之和。通过将数字按长度分组,确定k位所在的整数n及其位置pos。计算1到n-1的数字和时,分解每一位的贡献:前i位固定时的数字和与后面位均匀分布的贡献。最后加上n前pos位的数字和。该算法高效处理超大k值(如1e15),通过数学推导避免了直接遍历,确保时间复杂度与数字位数相关。样例验证了方法的正确性。
2025-09-23 23:22:13
527
原创 CF 1042 (Div. 3) D. ArborisContractio
那么我们可以发现答案为 总叶子节点数 - max(f[i]),此时有一个问题 如果只有两个点的话那么答案应该为0,三个点答案为1 需注意,按照我们公式 我们是默认忽略掉叶子节点的,为什么可以忽略呢?那么如果我们选择叶子节点的话 答案就是总的叶子节点个数-1,但是这显然不一定是最优的,比如我们选择上图的节点5,那么我们发现 8 9节点和5已经是最短距离了 而且节点 8 9没有子节点(即是叶子节点)此时答案为 总叶子结点数-2 不妨设第i个节点和叶子节点距离为1的个数为F(i),
2025-09-15 23:58:10
163
原创 链式前向星超详细使用教程C++版(数组模拟)
我们可以利用链表存储以当前点出发能到达的下一个点是哪一个,大家请看图(画的丑请见谅) 我们看1能达到2 3 5,于是我们利用链表简洁清爽的将图存储。于是我们需要存储以每个点能达到的下一个点的集合,初始都指向-1,然后每加入一个点就利用链表的头插法即可,然后我们还需要存储当前指向这个点的值,和这个点的下一个值,也就是和链表一模一样的value和next了。连接1-3 head[1] = 2,value[2] = 3,next[2] = 0(插到第一步的2中间了)连接1-5大家自行模拟即可。
2025-09-04 18:22:40
243
原创 P1631序列合并 堆题型
也就是说我们可以把这N个A[i]+b[1]...看成N个序列依次往后有N个序列的矩阵,我们初始时将A[i]+b[1]放进堆中,然后每次弹出并输出最小的a[i]+b[j],随后再将a[i]+b[j+1]放入堆中即可,这样即保证了这对数字不重复,并且每个行序列都有单调性,我们选择最小那个换成他的下一个保证了当前一定最小,非常巧妙,以下给大家展示样例剖析方便大家理解。我们可以发现一个简单的结论 A[1]+B[1]<=A[1]+B[2]<=A[1]+B[3]....<=A[1]+B[N]
2025-09-03 14:12:41
155
原创 P1801 利用对顶堆解决动态第k小数问题
我们下面放一个大根堆上面放一个小根堆 假设上面堆的所有值都大于下面堆的值,则从上至下的每一层是一个递减的序列那么有什么用呢?我们发现如果要找第k小个数,在满足上述前提下,我们只需要让大根堆的元素维持在k-1个即可,这样我们所要找到答案就一定是小根堆的根了。我们应该去小根堆最小值下去又因为要取第k小个数 所以下面必须先要有k-1个数,所以我们每次先要将当前大根堆的值调整值k-1才行,因为这里每次只累加1,所以我们只要在最后将小根堆的根插如大根堆即可。ui表示当前的数组a的元素到哪里了,然后输出第i小数。
2025-08-30 20:51:28
234
原创 2024ICPC第一场网络赛 F Make Max
还有一个特殊情况是 如果左边第一个大于等于ai的是当前这个数字 则在之前一定已经计算过了,此时只计算右边的即可,那么右边为什么不会重复,因为下次遍历到右边的左边就是当前这个了,最终代码如下。我们发现对于每一个数ai 他的最大贡献值是左边最大连续比他小的+右边连续比他小的,也就是说我们找到左边第一个大于等于ai 和右边第一个大于等于ai的 然后求区间里的数个数即可。给定n个数,每次可以将当前数字替换为左右比当前数字大的数,求最大操作数。如 1 1 1 2 2 2 2 ,最多能变三次。
2025-08-29 22:25:13
209
原创 P1083 借教室题解
摘要:题目要求确定从哪个订单开始无法满足教室分配需求。给出两种思路:1) 线段树维护区间最小值判断是否出现负数;2) 二分答案结合差分数组验证可行性。代码采用第二种方法,通过差分数组高效处理订单区间修改,二分查找第一个不满足条件的订单位置。若所有订单均可满足则输出0,否则输出第一个失败的订单编号。时间复杂度为O(n log m)。
2025-08-07 19:46:33
295
原创 CF333E Summer Earnings 枚举+BITSET优化
这篇文章提出了一种高效算法,用于在给定n个点(n≤3000)时找到三个点,使得它们作为圆心的相同半径的圆能够覆盖最大可能半径。关键思路是通过按边长降序枚举所有边对,使用bitset数据结构快速检测是否存在公共邻接点形成三角形。算法首先计算所有点对的距离并排序,然后利用bitset的位运算特性高效判断三点连通性。当找到第一个能形成三角形的边时,该边长度的一半即为所求最大半径。这种方法通过bitset优化将时间复杂度从O(n^3)降低到约O(n^2),能够在8秒时限内处理大规模数据。最终输出结果需将找到的边长除
2025-07-31 17:12:44
366
原创 LCA的倍增求法详解
其实很简单,我们还是求LCA(9,11),直到枚举到2的时候才可以往上 我们发现跳的长度 2的时候,9和11往上跳的时候已经重合了,也就是说我们要找的LCA只有可能在当前点或者当前点之前,所以我们选择不跳,因为由于是树,如果在某个点已经重合了,则这个点以及往上的部分必然是CA,但LCA一定是当前或者下方。,简单的想,我们可以先将该对的深度达到一致,于是我们让3往上直到3与7的深度相同,我们发现这不是上面提到两种情况的第二种,由结论易知,如果是情况2,则返还当前节点。3和7那么在两个不同的子树。
2025-07-23 15:44:25
451
原创 HDU -5936 折半枚举/二分题解
摘 要:本文针对HDU-5936问题,提出了一种折半枚举与二分查找相结合的优化算法。问题要求找到满足x=f(y,k)-y的所有y值,其中f(y,k)表示y各数字的k次方之和。通过分析y的上界(≤1e10),采用折半策略:预处理前1e5个数的f(y,k)值并排序,利用二分查找快速匹配后半部分。特别处理x=0的情况。算法有效降低了时间复杂度,避免了直接枚举1e10的不可行性。代码实现展示了预处理、排序和二分查找的关键步骤。
2025-07-13 22:40:23
704
原创 Almost All Multiples codefrces div386 C题
摘要:该问题要求构造一个数组,其中a1=x且an=1,其余元素需满足ai是i的倍数。当n是x的倍数时,可通过将n与x的倍数位置交换来构造最小字典序数组。具体实现时,若n不为x的倍数则无解输出-1。否则遍历2到n-1,将x的倍数与n交换位置。最终数组应满足每个ai是i的倍数且字典序最小。(150字)
2025-05-30 19:09:18
339
原创 树状数组求最长上升子序列
求LIS有三种方法,第一种为DP,但时间复杂度为n²,第二种为贪心+二分(nlogn),第三种则是树状数组来求也是nlogn的时间复杂度。
2025-05-29 00:09:47
345
原创 2025团体程序设计天梯赛L2 算式拆解
括住“ 然后按优先级找到优先级最高的括号内部 将内部计算式输出 然后”前面步骤中获得的结果不必输出 “前面步骤中获得的结果不必输出。例如在样例中,计算了。题意:给定一个算术式,”每个操作及其对应的两个操作对象都被一对圆括号。” 样例:(((2+3)*4)-(5/(6*7)))是前一步的结果,不必输出,所以第二行只输出。以后,下一步应该计算。
2025-04-22 14:22:31
508
原创 2025年团体程序设计天梯赛 L1 现代战争
题意: 给定一个n*m的矩阵 每次找到该矩阵中最大值Vij 然后将该最大值所在的行和列“炸掉”,给一个数K 表示要炸k次 最后输出 炸完之后的值。
2025-04-22 14:13:29
540
原创 2025团体程序设计天梯赛L1-大幂数
思路: 由于N<2^31 所以我们可以枚举幂的值从1-30 即可 然后枚举加到哪一个数字 从前往后枚举和从后往前枚举都可以 这里展示两种代码。题意:给定一个数N 找到一个幂k能满足 N=1^k+2^k+... N<2^31 如果有不同的两个k都满足条件,则选择最大的那个K。2.从后往前便利(找到即可退出)
2025-04-22 13:57:47
248
原创 2025团体程序设计天梯赛L1-零头就抹了吧
题意:给定一个数n 求一个小于等于n的最大数x满足x转换为二进制为10000的格式。思路 直接枚举2到(2^?
2025-04-22 13:31:16
291
原创 蓝桥杯 2024年省赛C组回文字符串
由题可知 只需要判断该字符串内部(左右第一个不是lqb的边界的内部)是否是一个回文字符串即可,则该题可以分为两步。2.判断内部是否是一个回文字符串即可```1. 通过两个指针找到左右边界。
2025-04-10 09:11:50
222
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅