算法
文章平均质量分 92
lingran__
大二在读(阅读建议,自下而上,依次渐进)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法沉淀第十三天(牛客周赛119)
本文分享了牛客周赛的五道算法题解:1. ICPCRank - 比较两队解题数和罚时决定排名;2. 序列极值 - 找数组中最大差值;3. 平方数 - 统计范围内数位和等于原数的平方数;4. 左右移动 - 模拟数的左右位移操作;5. 三角计数 - 计算能组成不同三角形的棍子组合数。每道题都包含题意分析、逻辑梳理和代码实现,帮助理解解题思路。原创 2025-11-27 20:03:06 · 957 阅读 · 2 评论 -
算法沉淀第十二天(牛客练习赛146)
本文分享了牛客练习赛146的三道算法题解:1.《合格的机器》通过分析代币奇偶性,得出最优解是尽量使机器代币数为偶数,当总代币数≥2n时最多n-1台合格;2.《小灰灰的火焰星球2》通过排序施法顺序和预处理价值数组,实现高效计算最大收益;3.《盲目自大的小灰灰》通过计算得分区间,判断查询分数是否可能达到。每道题都包含题意分析、逻辑梳理和AC代码实现,适合算法学习者参考。原创 2025-11-22 09:07:20 · 1512 阅读 · 1 评论 -
算法沉淀第十一天(序列异或)
本文讲解了一种高效解决"序列异或"问题的算法。题目要求在数组中找到满足四个不同下标元素异或结果为0的组合数。作者通过巧妙利用异或性质(a^a=0),将四重循环优化为二重循环:先用数组t记录前两元素异或结果的频次,再通过后两元素的异或结果在t中查找匹配。该方法将时间复杂度从O(n^4)优化到O(n^2),并给出了详细的代码实现和解释。最终通过预处理和动态更新统计值的方式高效解决了问题。原创 2025-11-03 22:10:31 · 1128 阅读 · 2 评论 -
算法沉淀第十天(牛客2025秋季算法编程训练联赛2-基础组 和 奇怪的电梯)
本文分享了算法练习内容,主要包括牛客基础赛的ABC题解和一道洛谷的DFS题目。牛客比赛部分讲解了如何计算游戏胜负场次、统计数字子串最大数量以及快速幂验算等算法思路。重点解析了一道DFS题目"奇怪的电梯",通过递归遍历所有可能的楼层移动情况,并用数组记录最小步数。文章提供了完整的代码实现,涵盖了算法分析、逻辑梳理和具体实现过程,适合算法初学者参考学习。原创 2025-10-23 17:26:46 · 1674 阅读 · 0 评论 -
算法沉淀第九天(Cinema Cashier)
本文介绍了解决CF1500难度题目"CinemaCashier"的算法思路。题目要求为N批人安排K*K电影院座位,每批人需要连续座位,优先选择离中心位置最近(距离和最小)的连座,行优先于列。算法核心是通过维护行列向量和标记数组,动态计算最佳可用位置,处理奇偶人数情况,并更新座位状态。文章详细解析了题目要求、解题逻辑和代码实现,包括中心位置计算、连续座位分配策略以及边界条件处理等关键步骤。代码使用C++实现,通过向量动态管理候选位置,确保高效找到最优解。原创 2025-10-22 18:20:20 · 1039 阅读 · 0 评论 -
算法沉淀第八天(牛客周赛 Round 114 和 Incremental Stay)
本文总结了牛客周赛Round114的题目解析和代码实现。重点讲解了四道算法题:1)"小彩找数"通过简单遍历数组解决;2)"小彩的好字符串"使用前缀和统计子串中数字出现次数;3)小彩的字符串交换;分析最小交换次数使子串包含1、2、3;4);小彩的数组选数"采用动态规划求最大得分。此外还解析了一道CF1400题目IncrementalStay,通过前缀和优化计算不同容量下的最大停留时间。文章提供了每道题的详题的详细分析思路和完整代码实现,适合算法学习者学习参考原创 2025-10-20 15:01:23 · 1986 阅读 · 0 评论 -
算法沉淀第七天(AtCoder Beginner Contest 428 和 小训练赛)
本文分享了AtCoder Beginner Contest 428和一场小型训练赛的解题思路。ABC428包含三道题:1)计算给定时间内的跑步距离;2)统计字符串中出现最频繁的子串;3)处理括号匹配查询。训练赛包含三道题:1)货仓选址问题,通过排序和中位数求解;2)数组元素变换问题,根据元素频率分析剩余元素;3)归并排序求逆序对数量。每道题都详细分析了题目要求和解题逻辑,并提供了AC代码实现。文章旨在帮助读者理解算法思路,提升编程能力。原创 2025-10-19 21:29:22 · 1497 阅读 · 0 评论 -
算法沉淀第六天(牛客小白月赛122 和 Codeforces Round 1059 (Div. 3))
本文总结了牛客小白月赛122和Codeforces Round 1059(Div.3)的解题思路。内容包括:1)牛客四道题的题目分析、逻辑梳理与代码实现(大话骰子、max-mid、糟糕手法、x_to_y_2);2)CF三题的解法(Beautiful Average直接取最大值,Beautiful String删除一种数字,Beautiful XOR通过两次异或操作转换)。重点针对各题的数据处理方式和算法选择进行了详细说明,提供了完整的AC代码参考。原创 2025-10-18 20:20:18 · 1729 阅读 · 3 评论 -
算法沉淀第五天(Registration System 和 Obsession with Robots)
本文讲解了Codeforces两道题目。第一题"Registration System"实现一个注册系统,处理重复用户名时在名字后添加数字。使用结构体存储用户名及其出现次数,通过遍历判断是否重复。第二题"Obsession with Robots"判断机器人移动路径是否为最短路径,需排除成环和十字格有多个访问点的情况。两题均给出了详细的分析思路和AC代码实现,帮助读者理解题目要求和解题方法。文章适合算法初学者学习基础编程思路和实现技巧。原创 2025-10-17 16:29:34 · 1649 阅读 · 0 评论 -
算法沉淀第四天(Winner)
这篇文章摘要总结了Codeforces 1500分题;Winner;的解题思路和代码实现。文章首先分析了题目要求:记录n轮比赛后得分最高者,若多人同分则输出最先达到该分数的人。然后详细讲解了使用vector数组存储选手信息、结构体排序处理分数比较的逻辑流程,并提供了完整的AC代码实现。最后强调了处理多人同分情况的特殊判断方法。该题解适合算法初学者学习如何通过合理的数据结构设计和逻辑处理来解决竞赛编程问题。原创 2025-10-16 21:52:19 · 1673 阅读 · 5 评论 -
算法沉淀第三天(统计二进制中1的个数 两个整数二进制位不同个数)
本文讲解了两道与位运算相关的算法题:统计二进制中1的个数和比较两个整数二进制位不同个数。对于第一题,提出了三种解题思路:1)将int转为unsigned int后逐位计算;2)使用移位和位与操作;3)利用n&(n-1)巧妙去除最低位1。第二题则通过比较两个数各位的异同来求解。两种题型都给出了完整的代码实现,展示了位运算在算法中的实际应用。文章由浅入深地讲解了位操作技巧,适合初学者理解二进制运算的基本原理。原创 2025-10-15 21:58:04 · 1494 阅读 · 2 评论 -
算法沉淀第二天(Catching the Krug)
本文讲解了一道CF评级1300的算法题"CatchingtheKrug"。题目描述A和B在网格上移动,B要追击A,A先走。通过分析位置关系,B总能通过斜向移动堵住A。解题关键是根据A和B的坐标差异分类讨论:当x坐标不等时,B沿着x轴方向推进;当x坐标相等时,B沿着y轴方向推进。最终答案取B到边界所需步数的最大值。代码实现简洁明了,通过判断坐标关系直接输出结果。这道题展示了如何通过分类讨论解决看似复杂的追击问题。原创 2025-10-14 19:56:35 · 1140 阅读 · 3 评论 -
算法沉淀第一天(Triple Removal)
本文介绍了CF评级1400的题目"Triple Removal"的解题思路。题目要求判断给定01数组的某个区间能否通过特定操作完全删除,并计算最小操作代价。关键点在于:1)区间长度必须为3的倍数;2)0和1的数量也需为3的倍数。解题时使用三个前缀和数组优化计算,分别记录0、1的数量以及相邻相同元素的情况。通过分析相邻元素的情况确定操作代价,若无相邻相同元素则初始代价较高。最终给出了AC代码实现,并解释了算法逻辑。该题目适合算法练习者理解前缀和优化技巧。原创 2025-10-13 21:13:42 · 1325 阅读 · 6 评论 -
速通ACM省铜第二十一天(补) 赋源码(共现的数)
这是一篇关于解决"共现的数"问题的算法讲解。作者首先反思了前一天因未注意多组数据而导致的错误,然后详细分析了题目要求:给定n个集合和m次查询,每次查询两个数,找出与这两个数都共现的其他数的个数。解题思路是统计每个数出现的集合,然后通过标记数组记录共现情况。文章提供了完整的C++代码实现,包括数据读取、标记处理和结果统计。最后作者鼓励读者提问和分享。该文适合算法学习者参考,重点讲解了处理集合共现问题的具体方法。原创 2025-10-10 21:21:05 · 848 阅读 · 3 评论 -
速通ACM省铜第二十天 赋源码(HNCPC2022 Big Matrix 和 Fibonacci Cane)
本文分享了ACM竞赛模拟赛中的两道题目解析。第一题"FibonacciCane"要求判断给定数字是否能表示为斐波那契数列的连续子列和,通过预处理斐波那契数列并使用前缀和解决。第二题"BigMatrix"涉及矩阵乘法求和,利用矩阵行列和的乘积性质简化计算。两题均给出了完整的AC代码实现,并分析了解题思路与关键点。文章最后鼓励读者提问交流,适合算法竞赛学习者参考。原创 2025-10-09 21:14:41 · 859 阅读 · 3 评论 -
速通ACM省铜第十九天 赋源码(SUMdamental Decomposition)
本文讲解了一道Codeforces 1300分题目SUM_RPrime的解法。题目要求给定数字个数n和目标异或值x,找到满足条件的最小数字和ign之和。文章详细分析了三种情况:1)当n=1且x=0时无解;2)当x=0时,通过奇偶分组处理;3)当x≠0时,根据x的二进制位数和n的关系进行特判。特别强调了x=1时的特殊处理方式。最后给出了完整的C++AC代码实现,包含主要逻辑判断和位运算处理。该题目虽然难度中等,但需要注意多个细节特判。原创 2025-10-01 17:19:50 · 1237 阅读 · 5 评论 -
速通ACM省铜第十八天 赋源码(Neo‘s Escape)
本文讲解了一道Codeforces 1400分题目"Neo's Escape"的解题思路。题目要求按从大到小顺序点亮一排按钮,通过放置机器人或移动现有机器人来操作,求最少需要的机器人数量。作者最初使用差分法解题但出现错误,发现该算法在连续相同元素作为谷底时失效。随后提出两种AC方法:一是去除重复元素后统计峰顶数量作为答案;二是改进后的谷底统计法,最终结果需加1。文章包含详细的问题分析、错误排查过程和两种正确解法代码实现,适合算法学习者参考。原创 2025-09-30 22:19:27 · 1215 阅读 · 3 评论 -
速通ACM省铜第十七天 赋源码(Racing)
这篇文章讲解了一道CF评级1400的编程题目"Racing",主要涉及飞机穿越障碍物的指令选择问题。文章分为三个部分:题意分析、逻辑梳理和代码实现。题目要求根据障碍物的高度范围(下限l和上限r)和指令数组(1上升、0平飞、-1可任选),判断是否存在使飞机安全通过所有障碍物的指令序列。解题关键在于维护最低高度Low和处理-1指令队列,通过动态调整-1指令为0或1来满足后续障碍物的高度限制。若无法满足条件则输出-1,否则输出最终确定的指令序列。文章提供了完整的C++实现代码,并强调了处理过程原创 2025-09-28 15:02:28 · 1698 阅读 · 11 评论 -
速通ACM省铜第十六天 赋源码(Sigma Cubes和Find Permutation 2和Rotate and Sum Query)
本文分享了作者参加AtCoder Beginner Contest 425的解题过程。文章重点讲解了A、B、C三道题目:A题考察奇偶数的三次方累加运算;B题要求判断是否存在满足条件的排列;C题则通过巧妙的前缀和与取模运算处理队列旋转操作,避免直接模拟导致超时。作者详细分析了每道题的解题思路和代码实现,其中C题的解法尤为精妙,利用双倍前缀和和取模运算高效处理旋转操作。全文语言生动,解题思路清晰,为算法竞赛初学者提供了实用的解题示范。原创 2025-09-27 23:13:35 · 1398 阅读 · 5 评论 -
速通ACM省铜第十五天 赋源码(Creating a Schedule)
本文分享了作者半个月来刷CF 1400-1500分题目的心得,通过一道具体题目(Problem-2111D)讲解解题思路。题目要求将n个小组分配到m个教室,使所有小组上下楼梯次数总和最大化。作者提出将最高层和最低层教室配对使用的策略,并给出了具体代码实现。文章展现了作者在算法思维上的提升过程,从最初需要一天解题到现在半小时内解决类似难度题目。解题方法采用排序后循环配对教室的方案,并处理了奇数个小组的特殊情况。原创 2025-09-25 21:15:51 · 1385 阅读 · 12 评论 -
速通ACM省铜第十四天 赋源码(Coloring Game)
本文讲解了一道CF评级1300的编程题ColoringGame。题目要求从n个元素的数组中选择3个红色元素,使它们的和大于另一个玩家选择的蓝色元素(数组最大值或红色元素中的最大值)。解题关键是通过排序和二分查找优化三重循环,避免TLE。给出了常规实现和优化后的AC代码,重点在于满足两个条件:三个元素中两个较小元素之和大于最大元素,且三个元素总和大于数组最大值。最终统计符合条件的组合数并输出。原创 2025-09-24 20:48:17 · 1343 阅读 · 7 评论 -
速通ACM省铜第十三天 赋源码(Watermelon)
本文讲解了一道CF评级800分的简单题目"Watermelon"。题目要求判断给定数字能否分成两个偶数(可以不同),能则输出YES,否则输出NO。解题逻辑只需判断该数是否为偶数(同时特判数字2的情况),代码实现简洁明了。作者通过这道基础题目帮助读者放松思维,适合算法初学者理解基本条件判断的应用。全文包含题目分析、逻辑梳理和完整代码实现,最后鼓励读者分享和提问。原创 2025-09-23 21:41:07 · 693 阅读 · 11 评论 -
速通ACM省铜第十二天 赋源码(Kirei Attacks the Estate)
本文讲解了一道名为"Kirei Attacks the Estate"的树形DP问题。题目要求计算以根节点1为起点的树结构中,每个节点能获得的最大值。解题思路是:通过递归遍历树结构,使用两个数组分别记录每个节点的最大值和最小值,其中最大值取当前节点值与其减去父节点最小值的较大者。文章提供了完整的C++代码实现,采用链式前向星建图,并通过队列进行遍历。最终输出每个节点的最大值数组即为答案。该问题适合算法初学者练习树形结构的动态规划应用。原创 2025-09-22 21:21:15 · 1439 阅读 · 11 评论 -
速通ACM省铜第十一天 赋源码(Gellyfish and Flaming Peony)
本文讲解了一道CF评级为1500的算法题,要求将数组元素通过最小操作次数变为相同值。解题思路分两种情况:1)若数组中已存在目标值(所有元素的GCD),则操作次数为n-目标值出现次数;2)否则使用BFS搜索,通过计算元素间GCD逐步逼近目标值。作者提供了自己的BFS解法代码(适合小数据量)和题解的DP解法代码(适合大数据量,但作者表示未完全理解)。文章强调了对重复元素的预处理优化,并建议读者进一步研究DP解法。原创 2025-09-21 15:20:51 · 1175 阅读 · 2 评论 -
速通ACM省铜第十天 赋源码(A Good Problem和Make It Beautiful和Gellyfish and Baby‘s Breath)
本文介绍了三道1300难度的算法题解析: AGoodProblem:通过分析数组长度奇偶性,确定如何构造满足异或与按位与结果相同的数组,关键在于处理偶数长度时如何使结果归零。 MakeItBeautiful:将数组元素转为二进制后统计每位1的个数,通过贪心策略在限制操作次数内最大化数组值,重点关注低位1的补充。 Gellyfish and Baby's Breath:优化原TLE代码,预处理2的幂次模值,通过动态维护两个数组的最大值下标,快速计算组合最大值,降低时间复杂度。 三题均包含详细逻辑分析与代码实现原创 2025-09-20 22:23:33 · 1302 阅读 · 8 评论 -
速通ACM省铜第九天 赋源码(Divine Tree)
本文讲解了一道Codeforces难度1400的树构造问题。题目要求构造一棵树,使得所有节点到根路径上的最小值之和等于给定值m。首先分析了树的最小值(n)和最大值(n(n+1)/2)范围,若m不在此范围直接输出-1。关键思路是从大到小放置节点,通过贪心算法确定节点位置,剩余节点按1处理。文章详细解释了正确思路与错误思路的区别,并提供了AC代码实现。最终通过标记已访问节点和动态调整构造顺序,高效地解决了该问题。原创 2025-09-19 21:29:08 · 1368 阅读 · 1 评论 -
速通ACM省铜第八天 赋源码(1709)
本文讲解了一道Codeforces难度1300的算法题(1709题)。题目要求对两个长度为n的数组a和b进行操作,使其最终满足三个条件:两个数组都严格递增,且每个位置的a[i] < b[i]。允许的操作包括交换相邻元素或在相同位置交换两个数组的元素。解题思路是:先对两个数组分别进行排序(使用插入排序记录操作步骤),然后遍历比较对应位置,若a[i] > b[i]则交换并记录。最终输出操作次数及具体步骤即可。该解法虽然操作次数不一定最优,但能保证在有限步骤内完成任务。原创 2025-09-18 21:31:21 · 1383 阅读 · 5 评论 -
速通ACM省铜第七天 赋源码(Sponsor of Your Problems)
本文讲解了一道CF中难度1500的竞赛题,要求计算给定区间[l,r]内某个x使得f(l,x)+f(x,r)最小,其中f(a,b)表示两数相同位的数量。通过分析,当l和r某位数字差值大于1时,后续位可自由选择使结果最小;若差值等于1,则需后续位满足特定条件(如9和0)才能继续累加。最终解法通过逐位比较处理三种情况,时间复杂度为O(n)。虽然题目标为1500难度,但实际难度较低,作者认为应归类为1200-1300难度。原创 2025-09-17 17:28:49 · 1107 阅读 · 1 评论 -
速通ACM省铜第六天 赋源码(MEX Count)
本文介绍了一道难度分1400的算法题MEXCount。题目要求对长度为n的数组进行0到n次删除操作后,计算每次操作后数组最小非负整数的可能取值数量。解题关键在于确定每个x满足条件时的删除元素个数范围,利用差分数组高效计算。当数组中出现x的个数为0时即可中断后续处理。最终通过差分数组优化解决了范围统计问题,给出了简洁的AC代码实现。原创 2025-09-16 21:13:24 · 1055 阅读 · 5 评论 -
速通ACM省铜第五天 赋源码(Subset Multiplication)
速通ACM省铜第五天 本文针对Codeforces 2124C题进行解析,作者最初因题目翻译错误(将"i+1元素整除i元素"误译为相反)而耗费大量时间。通过分析a数组和b数组的转换关系,提出三种情况下的数学处理方案。核心解法是从后向前遍历数组,通过迭代计算最大公约数(GCD)和最小公倍数(LCM)来推导可能的x值。最终给出的C++实现代码通过gcd和lcm函数的配合,在O(n)时间复杂度内解决问题。作者反思这道1300分题目的实际难度超出预期,突显数学思维在原创 2025-09-15 20:39:08 · 1491 阅读 · 0 评论 -
速通ACM省铜第四天 赋源码(G-C-D, Unlucky!)
本文解析了一道CF难度1400分的编程题,要求验证是否存在满足特定条件的数组。题目给出两个数组,分别代表从前往后和从后往前求公约数的结果。解题关键包括四个条件验证:1)两个数组首尾元素必须相等;2)两个数组必须保持单调性;3)相邻元素需满足公约数关系;4)特定位置元素的最大公约数必须等于整个数组的公约数。作者提供了详细的逻辑分析和C++实现代码,最终通过四个条件的验证判断是否存在符合条件的数组。该解法思路清晰,条件验证全面,适合算法学习者参考。原创 2025-09-14 21:45:48 · 1599 阅读 · 4 评论 -
速通ACM省铜第三天 赋源码(Double Perspective和Trip Shopping和Hamiiid, Haaamid... Hamid?)
本文分享了三个算法题的解题思路。第一题(2129A)通过排序边并选择不形成环的最长线段来最大化f(S')-g(S')的值;第二题(2127B)通过分析玩家初始位置和墙的分布,计算最快逃脱步数;第三题(2127C)通过排序数据并比较相邻元素的差值来优化结果。代码实现中使用了结构体排序和vector等技巧,并强调了时间复杂度的重要性。解题过程注重逻辑梳理和边界条件处理,最终通过优化策略获得AC解。原创 2025-09-13 20:57:50 · 1050 阅读 · 1 评论 -
速通ACM省铜第二天 赋源码(Adjacent XOR和Arboris Contractio)
本文讲解了两道Codeforces题目:AdjacentXOR和ArborisContractio。AdjacentXOR要求判断数组a能否通过相邻元素异或操作转换为数组b,关键在于比较末尾元素并分析三种转换条件。ArborisContractio则是将无环树深度压缩为2,通过统计叶子节点数量来优化操作次数。第一题思路简单但代码实现直接,第二题思路清晰但需注意数组存储位置防止栈溢出。两题均提供了详细的分析和AC代码实现。原创 2025-09-12 21:18:01 · 1003 阅读 · 0 评论 -
速通ACM省铜第一天 赋源码(The Cunning Seller (hard version))
本文讲解了一道关于购买西瓜的算法题(The Cunning Seller hard version),难度评级为1400分。题目要求用不超过k次交易购买n个西瓜,每次交易数量必须是3的幂次方,并求出最小花费。 解题思路分为: 将n转换为三进制,计算最小交易次数和初始花费 通过"进制退位"优化:将高次幂交易拆分为低次幂,在总交易次数允许范围内减少花费 关键点包括三进制转换、交易次数计算和优化退位操作 作者分享了多次WA的调试经验: 必须重置存储三进制的数组san,否则前次计算结果会影响后续原创 2025-09-11 19:38:36 · 1433 阅读 · 4 评论 -
洛谷P1220 关路灯(深搜dfs 递归)(附源码)
本文介绍了一个使用深度优先搜索(DFS)算法解决"关路灯"问题的实现方案。题目要求找到从指定位置c出发,关掉所有路灯的最小总耗电量。解决方案采用递归函数dfs(),通过遍历左右两侧未关闭的路灯,计算移动过程中的电力消耗,并记录最小值。虽然DFS在时间复杂度上可能较高,但对于n≤50的数据规模仍可接受。文章详细说明了变量声明、函数参数、核心逻辑和主函数流程,并提供了完整的C++源代码。该问题作为递归和搜索算法的练习案例,有助于加深对DFS原理的理解。原创 2025-09-02 20:34:33 · 904 阅读 · 0 评论
分享