- 博客(122)
- 收藏
- 关注
原创 P4469 [SCOI2007] 最优驾车
这是一道关于网格路径优化的动态规划问题。题目要求在t1~t2时间内从起点到终点的最短时间和最少油耗。解题关键点包括:1) 将速度和时间离散化处理,利用速度是5倍数的特性将时间计算转化为整数;2) 使用状态压缩DP,其中第三维表示时间状态;3) 通过倒序枚举时间优化计算效率;4) 根据不同起点和终点的相对位置分类处理状态转移。最终通过预处理所有可能的时间状态,在限定范围内求解最优解。代码实现了这些优化思路,并处理了各种边界情况。
2025-10-26 22:11:59
292
原创 过河(river)
起点为河岸的0米处,河流覆盖1到L米的范围,平平必须最终跳过L米(即落地点大于L)才能成功过河。然而,河流的水流湍急,如果平平无法过河,他可能会落水。如果不能,输出他能够到达的最远距离(从起点开始测量的坐标值),以便救援团队准备营救。注意:岩石和浮板的位置都是河面上的点,输入时原有岩石的位置已按从小到大排序。第一行输入五个整数:L、N、M、S、T,分别表示河流的长度(单位:米)、原有岩石的数量、可用人工浮板的数量、平平的最小跳跃距离(单位:米)和最大跳跃距离(单位:米)。
2025-10-17 16:21:07
322
原创 草莓植物(plant)【高精度-->array高级!!!】
小明观察到,一株新种植的草莓在第一个月会生出a株新植株,在第二个月会生出b株新植株,从第三个月开始,每个月都会生出c株新植株。输入只有一行,包含四个整数a, b, c, N(0<=a<=b<=c<=100,N<=3000),分别表示第一个月、第二个月和第三个月及以后每月生出的新植株数量,以及需要计算的月数N。小明很好奇,如果他从一株刚种植的草莓开始,按照这种理想模式繁殖,那么在第N个月时,花园中总共会有多少株草莓植株?为了帮助小明规划花园的空间,你需要计算第N个月的总植株数量。
2025-10-09 21:38:46
238
原创 动态DP细谈
动态DP算法简介 动态DP主要用于解决树形结构上的动态修改问题,分为树形动态DP和线性动态DP两类。树形动态DP采用虚树+树形DP的方法,通过建立只包含关键点的虚树来优化计算。当修改点权值时,只需在虚树上重新计算,避免对整个树进行DP。其核心步骤包括:1)按DFS序处理关键点;2)使用栈维护当前处理链;3)构建虚树时保留关键点及其最近公共祖先。这种方法适用于修改次数少但修改点集中的场景,能有效降低时间复杂度。
2025-10-08 21:49:41
229
原创 Codeforces Round 1043 (Div. 3) D. From 1 to Infinity
这篇文章摘要: 题目要求计算由1到无穷大的正整数连接而成的超长数字序列中前k位数字的总和。输入包含多个测试用例,每个测试用例给出一个整数k(1≤k≤10^15),需要输出对应序列的数字和。 解题思路采用分阶段处理: 预处理不同位数区间的数字个数和数字和 对于给定的k,确定其所在的数字位数区间 计算完整数字的数字和 处理剩余不完整数字的数字和 代码使用动态规划方法预处理数字和,并处理极大范围的输入数据。通过数学计算确定k所在的数字区间,再结合数位DP技术高效求解。时间复杂度主要取决于数位处理,能够高效处理极大
2025-08-28 21:03:02
375
原创 Codeforces Round 1043 (Div. 3) E. Arithmetics Competition
这是一道关于在给定约束条件下寻找最大和的编程竞赛题目。题目描述了两个队员各自拥有若干张数字牌,每轮比赛给出三个限制条件,要求从两人牌中选出指定数量的牌,使得总和最大。 关键解决思路: 对两个数组分别进行从大到小排序并计算前缀和 使用三分法在O(log n)时间内找到每轮比赛的最优解 通过预处理排序和前缀和,将每次查询的复杂度优化到可接受范围 该算法有效利用了排序和三分查找技术,在较大数据量下仍能保持较高效率。注意处理边界条件和特殊情况的判断,确保程序在所有测试用例下都能正确运行。
2025-08-28 21:00:09
1028
原创 Codeforces Round 1043 (Div. 3) F. Rada and the Chamomile Valley
本文摘要:题目描述了一个连通无向图,要求处理每天查询,找出从1号房屋到n号房屋的必经路径中距离查询点最近的最小索引边。解法包括:1)使用BFS标记1到n路径上的边;2)通过Tarjan算法识别桥边;3)对标记的桥边端点进行启发式BFS预处理存储答案。该方法确保在O(1)时间内回答每个查询,满足题目的大数据量要求。
2025-08-28 20:31:56
1437
原创 codeforces(1045)(div2)D. Sliding Tree
该代码解决滑动树操作问题,要求将给定的树通过滑动操作转化为路径图(所有节点度数≤2)。关键步骤如下: 输入处理:读取多组测试用例,构建树的邻接表并统计节点度数。 判断链状结构:若所有节点度数≤2,直接输出-1。 求树的直径:通过两次BFS找到最远节点对(p1,p2)。 标记直径路径:记录从p1到p2的路径节点。 寻找Y型结构:在直径路径上寻找度数>2的节点,输出其相邻节点(一个在直径上,一个不在)作为滑动操作的初始选择。 时间复杂度为O(N),适用于大规模数据。通过优化输入输出和及时终止处理提升效率。
2025-08-27 21:03:23
998
原创 codeforces(1045)(div2) E. Power Boxes
摘要 本文提出了一种解决交互式问题的算法,通过不超过$\left\lceil \frac{3n}{2} \right\rceil$次查询确定n个方格的幂值(1或2)。算法分为两个阶段:首先从右向左计算每个点的跳跃次数$d[i]$,若相邻点的$d$值不同则直接确定当前点幂值;否则标记该点并在第二阶段通过交换和抛掷操作确定其值。代码实现中使用了动态规划思想,通过比较相邻点的跳跃次数来推导幂值,最终输出所有方格的幂值序列。该方法在保证查询次数限制的同时,有效解决了问题。
2025-08-27 20:57:38
1068
原创 Reachability Query
本文介绍了一个基于并查集的动态集合管理系统,支持三种操作:合并集合、切换元素活跃状态、查询集合是否存在活跃元素。系统使用路径压缩和按大小合并优化,时间复杂度接近$O(\alpha(n))$。核心数据结构包括父节点数组fa[N]、活跃计数器cnt[N]和状态标记数组f[N],通过find()、merge()和change()函数实现高效操作处理。该系统在$O(n)$空间复杂度下,能够快速响应集合合并、状态切换和查询请求,适用于需要动态维护集合关系的应用场景。
2025-08-25 21:02:35
344
原创 AtCoder Beginner Contest 420-Toggle Maze
该问题要求在HxW网格中,从起点S出发到达终点G,每次移动只能到相邻可行格子。某些格子(o/x)的通行性取决于当前状态(0或1),而开关格子(?)会切换状态。需要通过BFS同时记录位置和状态来求解最短路径。 摘要: 题目给定H行W列的网格,包含不同类型格子(空地、障碍、起点、终点、门、开关)。移动规则受当前状态影响,每次经过开关会切换状态。要求判断能否从起点到终点,并求最少操作次数。使用BFS遍历所有可能的状态和位置组合,记录最短路径。时间复杂度O(nm),空间复杂度O(nm)。
2025-08-25 20:47:10
834
原创 P1064 [NOIP 2006 提高组] 金明的预算方案
本文解析了一个基于依赖关系的背包问题解决方案。题目要求选择主件和附件物品组合,满足预算限制下最大化价值总和。代码通过预处理将物品分为主件和附件,使用动态规划分组处理主件及其附件,确保依赖关系被满足。核心步骤包括:输入处理、依赖关系预处理、动态规划求解和结果输出。优化点包括使用极小值初始化和分组处理减少重复计算。最终输出满足预算的最大价值,时间复杂度为O(nm),适用于中等规模数据。注意附件必须依赖主件购买,且处理顺序不能破坏依赖关系。
2025-07-11 19:01:59
448
原创 P9755 [CSP-S 2023] 种树
这篇文章摘要总结了题目要求和解题思路: 题目要求在一个树形结构的森林地块上种植树木,每个地块的树每天生长高度由参数b_i和c_i决定,需要让所有地块的树达到指定高度a_i。种植顺序受限,每天只能选择与已种地块相邻的地块种植。 解题思路: 计算每个地块在给定时间区间内能达到的高度,考虑c_i的正负两种情况。 使用二分法确定最小天数,初始范围为[n,1e9]。 验证每天数是否满足所有地块需求,计算每个地块最早满足时间ti[i]。 按ti[i]排序后模拟种植过程,确保时间约束。 代码实现: 使用邻接表存储树结构
2025-07-11 18:56:49
778
原创 P8819 [CSP-S 2022] 星战
本文研究了星际战争中虫洞系统的状态维护问题。系统包含n个据点和m条单向虫洞,需要处理四种操作:摧毁/修复单个虫洞或据点。核心思路是通过随机点权和动态维护依赖关系来高效判断反攻时机。关键要点包括: 初始化时给每个节点分配随机权重,计算初始依赖总和; 使用to数组动态跟踪每个节点的当前依赖值,sum数组保存初始依赖; 每次操作后比较当前依赖总和与初始点权总和来判断是否满足反攻条件; 四种操作类型分别对应不同的依赖调整逻辑,保证实时更新系统状态。 该算法通过O(1)时间处理每个操作,总复杂度O(n+m+q),适用
2025-07-10 20:45:02
712
原创 P8818 [CSP-S 2022] 策略游戏
摘要 该代码解决了一个策略游戏问题,涉及两个数组A和B构成的矩阵C。游戏每轮给定子矩阵范围,两位玩家分别选择行列下标以最大化/最小化得分。算法采用稀疏表(ST表)预处理数组A和B的极值,包括最大值、最小值以及特殊条件下的极值(全正或全负)。查询时通过组合这些极值快速计算最优得分:当A值为负时乘以B的最大值,为正时乘以B的最小值。预处理复杂度为O(n log n + m log m),查询复杂度为O(1),适用于大规模数据。代码通过多个ST表对象分别存储不同条件下的极值信息,高效解决了最优策略下的得分计算问题
2025-07-09 20:54:07
704
原创 P2495 [SDOI2011] 消耗战
摘要:本文研究如何在一棵树形战场网络中,通过最小代价切断敌军总部与所有能源岛屿的连接。采用虚树优化和树形DP的方法,结合树链剖分预处理和线段树维护路径最小值。算法首先构建虚树压缩关键点结构,再通过动态规划求解最小切断代价。预处理复杂度为O(n log n),每次查询复杂度为O(k log k + k log n),总复杂度为O(n log n + q·k(log k + log n)),适用于大规模数据。实验证明该方法能高效解决多组能源分布情况下的最小切断问题。
2025-07-09 20:32:09
1448
原创 我的创作纪念日
创作初心与技术成长 最初成为创作者,是为了记录学习过程中的思考,并通过文章进行技术交流。在实战项目中积累的经验,让我想分享给更多人,同时与同行互相学习。 创作收获 收获了数百名粉丝的关注,文章获得大量点赞和评论,阅读量稳步提升。更重要的是,认识了许多志同道合的开发者,拓展了技术视野。 平衡创作与工作 创作已成为生活的一部分,但时间有限。我会利用碎片时间写作,确保不影响核心工作与学习。 代码成就 曾优化过一段高并发处理逻辑: async def batch_process(data): semaphore =
2025-07-09 18:59:20
233
原创 P1099 [NOIP 2007 提高组] 树网的核
摘要: 题目要求在一棵带权树中找到一条长度不超过s的直径子路径,使其偏心距(最远节点到该路径的距离)最小。算法使用Floyd-Warshall预处理所有节点间的最短路径,然后遍历所有满足长度约束的路径,计算其偏心距并取最小值。核心思路是通过动态规划优化路径查询,利用几何性质计算垂直距离。时间复杂度为O(n³),适用于节点数n≤300的规模。代码实现包含邻接矩阵初始化、最短路径更新和偏心距计算三个关键步骤。
2025-07-07 19:38:50
996
原创 P1098 [NOIP 2007 提高组] 字符串的展开
本文介绍了NOIP 2007提高组第二题的字符串展开算法。该题要求对输入字符串中的连字符"-"进行灵活扩展,根据参数p1、p2、p3控制扩展方式。主要逻辑包括:检查连字符前后字符是否为同类型且满足扩展条件;根据参数生成填充字符(可能大小写转换或星号替换);处理顺序或逆序填充。算法通过遍历字符串,遇到符合条件的连字符时进行相应扩展,否则保留原样。时间复杂度为O(n*k),其中n为字符串长度,k为填充重复次数。代码实现中包含了字符类型检查、参数处理和主逻辑三个主要部分,注意处理边界条件和特殊
2025-07-07 19:31:23
1010
原创 P1351 [NOIP 2014 提高组] 联合权值
摘要:本题要求计算无向连通图中所有距离为2的有序点对的联合权值最大值和总和。关键思路是利用树的特性,通过DFS预处理每个节点的父节点、子节点权值信息,维护最大和次大子节点权值。答案计算时,考虑祖父节点与当前节点的乘积,以及子节点间的组合。时间复杂度O(n),空间复杂度O(n)。代码使用邻接表存储树结构,利用数学公式优化子节点权值组合计算,确保高效处理大规模数据。最终输出联合权值最大值和对10007取模后的总和。
2025-07-04 20:46:09
946
原创 P1941 [NOIP 2014 提高组] 飞扬的小鸟
这是一道基于Flappy Bird游戏改编的动态规划问题。摘要如下: 题目要求在n×m的游戏平面上,小鸟从左侧出发到达右侧,通过k个管道。玩家可以选择点击屏幕上升或不点击下降,每个位置上升x和下降y的高度不同。需要判断能否通关,若能则输出最少点击次数,否则输出最多通过管道数。 解法采用动态规划,使用滚动数组优化空间复杂度为O(m)。状态转移分上升(点击)和下降(不点击)两种情况处理,其中上升转移需处理连续点击的特殊情况。遇到管道时要将障碍区设为无效值并检查是否存在可行路径。时间复杂度为O(n·m),空间复杂
2025-07-04 20:38:00
1022
原创 P1522 [USACO2.4] 牛的旅行 Cow Tours
这篇题解探讨了如何通过添加一条路径连接两个牧场,使得新牧场的直径最小化。以下是摘要: 问题描述:给定多个牧区及其坐标,以及表示牧区连接的邻接矩阵。牧区分为多个不连通的牧场。要求添加一条路径连接两个牧场,使新牧场的直径(最远两牧区间的最短距离)最小。 方法概述: 输入处理:读取牧区数量、坐标和邻接矩阵。 并查集管理连通性:初始化并查集,处理邻接矩阵以确定牧区间连接关系。 计算最短路径:使用Floyd-Warshall算法计算所有牧区对的最短距离。 记录最大距离:存储每个牧区的最远可达距离及其所属牧场的直径。
2025-07-03 21:00:43
611
原创 P1155 [NOIP 2008 提高组] 双栈排序
这篇文章探讨了双栈排序问题,要求通过两个栈及其四种操作将输入序列升序排列。核心思路包括栈操作模拟和合法性检查,通过贪心策略生成字典序最小的操作序列。若无法完成排序则输出0。代码实现利用两个栈和辅助栈进行模拟,并通过check函数验证操作合法性。文章还指出原方法存在漏洞,并提供了一个有解的反例。适用于理解栈排序问题的算法实现和边界情况处理。
2025-07-03 20:52:23
852
原创 P1074 [NOIP 2009 提高组] 靶形数独
本文研究了一种特殊数独问题——靶形数独的求解方法。靶形数独与传统数独的区别在于每个格子根据位置不同具有不同的权重值(6-10分),最终得分是填入数字与对应格子的权重乘积之和。文章提出了一个基于深度优先搜索(DFS)的解决方案:首先初始化权重矩阵,统计初始数独状态并记录行、列、子矩阵的数字占用情况;然后对需要填充的行按空格数量排序优化搜索顺序;最后使用DFS尝试填充数字,计算最大加权得分。代码实现了权重矩阵初始化、子矩阵编号计算和DFS回溯算法,能够有效求解靶形数独的最高得分问题。
2025-07-03 20:36:52
1522
原创 P1073 [NOIP 2009 提高组] 最优贸易
本文提出了一种基于分层图和SPFA算法的最优贸易路径解决方案。通过构建三层图结构(未购买、已购买未卖出、已卖出)来模拟贸易过程,在不同层间建立权重边表示买入和卖出操作。使用SPFA算法计算从起点到终点的最长路径,从而获得最大利润。该方法高效处理了大规模城市和道路数据,确保了在100000个城市和500000条道路的约束下仍能快速求解。代码实现清晰,分层转移逻辑明确,适用于存在价格差异的贸易场景。
2025-07-03 20:18:55
881
原创 P1006 [NOIP 2008 提高组] 传纸条
题目描述了一个传纸条问题,要求从矩阵左上角到右下角再返回的两条不相交路径,使路径上数值之和最大。解决方案使用动态规划,定义四维数组dp[i][j][p][q]表示两条路径分别到达(i,j)和(p,q)时的最大和。通过四重循环遍历所有可能路径组合,状态转移考虑四种移动方向组合,并确保两条路径不重复经过同一格子(终点除外)。最终输出dp[n][m-1][n-1][m]作为结果。算法时间复杂度较高但可通过空间优化改进,适用于50×50的数据规模。
2025-07-03 20:11:35
959
原创 P1312 [NOIP 2011 提高组] Mayan 游戏
Mayan puzzle是一种方块消除游戏,玩家需要在有限步数内清空7×5的棋盘。摘要概述了该问题的算法思路:使用深度优先搜索(DFS)枚举所有可能的操作序列,结合回溯机制和状态恢复。核心函数包括消除检测(标记并清除连续三个及以上同色方块)、下落处理(填补消除后的空隙)和连锁消除(递归执行消除和下落)。算法通过剪枝优化减少无效搜索,时间复杂度为O((5×7)^n)。代码实现展示了状态表示、操作序列存储和DFS递归过程,最终输出字典序最小的解或-1表示无解。该解法适用于步数限制n≤5的中等规模问题。
2025-07-01 20:26:07
1086
原创 P1967 [NOIP 2013 提高组] 货车运输
这是一道关于货车运输路径最大载重问题的算法题解。我们需要在给定城市道路网络中,为每辆货车寻找从起点到终点的路径,使得路径上最小限重最大化。 算法核心思路: 离线处理所有查询请求 使用并查集结合启发式合并技术 逆向Kruskal算法(按边权重从大到小处理) 关键步骤: 将道路按限重排序 初始化并查集和查询集合 逆向处理道路,合并连通分量时检查是否有匹配的查询 使用启发式合并优化集合操作 时间复杂度: 排序:O(mlogm) 并查集操作:O(mα(n)) 集合合并:O(qlogqlogn) 该算法通过巧妙地将查
2025-06-30 20:36:47
942
原创 P1967 [NOIP 2013 提高组] 货车运
摘要:题目描述了一个货车运输问题,给定n个城市和m条限重道路,要求处理q次查询,计算每辆货车在不超过限重的情况下能运输的最大货物重量。算法思路是将问题转换为求所有特殊点到各节点的最短路径之和,使用SPFA算法进行优化,累加距离并取最小值。时间复杂度约为O(n·k·m),适用于稀疏图和小规模特殊点场景。核心代码实现了邻接表存储、SPFA最短路径计算和全局距离累加,最终输出最小总距离。
2025-06-30 20:26:57
897
原创 P1080 [NOIP 2012 提高组] 国王游戏
摘要: 本文解决了一个国王与大臣的奖赏分配问题,要求通过最优排序使最大奖赏最小化。通过数学推导证明最优策略是按大臣左右手乘积升序排列。由于数据规模大,采用高精度处理乘积和除法。算法流程包括:初始化国王数据、排序大臣、遍历计算每位大臣奖赏并更新最大值。最终输出最小化的最大奖赏值,时间复杂度为$O(n \log n + nL)$,其中$L$为高精度数字位数。代码实现验证了该策略的正确性。
2025-06-28 16:49:59
852
原创 P1081 [NOIP 2012 提高组] 开车旅行
本文提出了一种基于倍增预处理的高效算法,解决城市旅行中驾驶路线规划问题。算法分为两个主要部分:预处理阶段和查询处理阶段。在预处理阶段,首先使用平衡树维护城市海拔信息,快速查找每个城市的最近和次近目的地;然后通过动态规划构建倍增表,记录不同跳跃步数下的行驶信息。查询阶段利用倍增思想快速计算从任意起点出发的行驶距离。该算法将每次查询的时间复杂度优化至O(log n),显著提高了大规模数据下的处理效率。实验结果表明,该方法能够正确处理各种边界情况,包括海拔相同距离的城市选择等复杂场景。
2025-06-28 16:39:13
1100
原创 P1850 [NOIP 2016 提高组] 换教室
题目要求计算牛牛在教室间移动的体力消耗最小期望值。给定n个时间段,每个时间段有2个教室可选,最多申请m次更换教室的机会。需要预处理教室间的最短路径,然后用动态规划求解。状态定义为f[i][j][0/1]表示前i个时间段申请j次,当前是否申请的最小期望体力。转移时考虑申请通过的概率,计算相邻教室间的路径消耗。最终输出精确到小数点后2位的最小期望值。
2025-06-26 20:13:25
868
原创 P1600 [NOIP 2016 提高组] 天天爱跑步
本题综合运用了 LCA、树上差分和桶计数技术,通过巧妙的路径拆分和动态维护桶数组,高效解决了树上路径观察问题。关键在于将玩家路径拆分为上行和下行两部分,分别设计观察条件,并通过 DFS 遍历过程中的桶更新和撤回操作统计答案。
2025-06-26 19:36:44
1115
原创 P1563 [NOIP 2016 提高组] 玩具谜题
本文介绍了NOIP2016提高组D1T1玩具小人谜题的解法。题目要求根据n个玩具小人的朝向(0朝内,1朝外)和m条移动指令,模拟在环形队列中的移动过程,最终输出目标小人的职业。关键点在于:1)根据当前小人朝向调整移动方向;2)通过取模运算处理环形队列;3)将逆时针移动转换为等效的顺时针移动。程序使用数组存储朝向和名字,时间复杂度O(m),空间复杂度O(n),通过统一处理顺时针移动简化了逻辑。
2025-06-26 19:10:39
585
原创 P7915 [CSP-S 2021] 回文
摘要 该题目要求通过特定的双端操作将给定序列转换为回文序列。给定一个长度为 $2n$ 的序列,其中数字 $1$ 到 $n$ 各出现两次,通过交替从序列两端取出元素构造新序列 $b$,使其成为回文。若可行,需输出字典序最小的操作序列('L'或'R'分别表示取左端或右端);否则输出-1。 算法核心: 回文约束:$b$ 的对称位置必须相同,因此需将原序列中相同数字分配到对称位置。 贪心策略:优先尝试左端操作('L')以保证字典序最小,并通过双端队列模拟剩余元素的匹配过程。 匹配检查:每次处理时检查两端四种可能的匹
2025-06-25 20:11:12
760
原创 P7914 [CSP-S 2021] 括号序列
摘要 本文解决了一个关于"超级括号序列"的计数问题。给定一个包含(,),*,?的字符串,其中?可替换为任意字符,要求计算所有满足以下条件的替换方案数:1) 形成的字符串是合法括号序列;2) 连续*不超过k个。算法采用动态规划,定义了5种状态来刻画不同形式的合法序列,通过三重循环(区间长度、起点、分割点)进行状态转移,最终输出整个字符串的合法方案数。时间复杂度O(n^3),空间复杂度O(n^2)。样例输入7 3 (*??*??的输出为5,表示有5种合法替换方式。
2025-06-25 19:53:32
791
原创 P7913 [CSP-S 2021] 廊桥分配
摘要 本文研究了机场廊桥分配问题,给定n个停机位和m1个国内航班、m2个国际航班的到达和离开时间,目标是最大化能够使用停机位的航班数量。通过贪心算法实现高效分配:采用优先队列管理停机位,确保航班优先使用最小编号的可用停机位。算法首先对航班事件进行排序,然后遍历事件序列,动态分配和回收停机位,最后计算不同分配方案下的最优解。时间复杂度主要取决于排序步骤,为O((m1 + m2) log (m1 + m2)),能够处理10^5量级的数据规模。
2025-06-25 19:31:35
741
原创 P1091 [NOIP 2004 提高组] 合唱队形
摘要:本题要求从n位同学中选出k位,使他们形成先递增后递减的合唱队形。算法使用动态规划,分别从左到右计算最长递增子序列(be数组)和从右到左计算最长递减子序列(en数组)。对于每个位置,计算保留该元素作为山峰时需删除的元素数(n-be[i]-en[i]+1),取最小值即为答案。时间复杂度O(n²),空间复杂度O(n)。示例输入8位同学的身高数据,输出最少需删除4位同学。
2025-06-24 20:39:58
741
原创 P1092 [NOIP 2004 提高组] 虫食算
摘要: 这是一道关于N进制加法虫食算的搜索问题。题目给出了两个用字母表示的N进制加数和一个和,要求为每个字母分配唯一的数字(0到N-1),使得加法成立。解决方案采用深度优先搜索(DFS)结合剪枝策略,逐步确定字母对应的数字并通过验证函数检查部分解的合法性。代码中定义了字母顺序(按列优先从右到左),通过递归尝试可能的数字分配,最终输出唯一解。示例展示了5进制下的解法验证过程。该算法在最坏情况下为O(N!)时间复杂度,但通过剪枝优化实际性能。
2025-06-24 20:30:01
1452
原创 P2661 [NOIP 2015 提高组] 信息传递
题目描述n个同学通过固定传递对象进行信息传递,当有人得知自己的生日时游戏结束。要求找出游戏进行的轮数,即图中最小环的长度。 解题思路: 将问题转化为在有向图中寻找最小环 使用Tarjan算法识别所有强连通分量 统计节点数>1的强连通分量(即环) 输出最小环的大小 算法复杂度为O(n),适用于n≤2×10^5的数据规模。通过邻接表存储图结构,利用栈和后序遍历实现强连通分量的高效查找。
2025-06-23 19:35:54
1044
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅