- 博客(31)
- 问答 (4)
- 收藏
- 关注
原创 Fiber架构、state与渲染
本文介绍了React的Fiber架构和状态管理机制。首先分析了传统组件状态管理的问题,即局部变量无法触发重新渲染且缺乏持久化能力。然后详细讲解了Fiber架构的核心特点:通过链表结构实现可中断的渲染过程,采用时间分片技术将工作分为协调和提交两个阶段,并使用双缓存技术提升性能。重点阐述了useState Hook的工作原理,说明状态如何存储在Fiber节点的memoizedState链表中,以及setState如何通过更新队列实现异步状态变更。文章还简要介绍了环形队列结构在状态更新中的高效应用。
2026-05-08 16:38:25
453
原创 JavaScript异步学习笔记
JavaScript异步编程演进 摘要:本文系统梳理了JavaScript异步编程的核心概念与发展历程。首先解释了进程与线程的区别、并发与并行的差异,以及同步与异步的本质区别。重点分析了JavaScript作为单线程语言必须采用异步机制的原因——避免阻塞主线程。随后详细介绍了异步编程的演进路线:从最初的回调函数,到Promise的链式调用,再到Generator的协程控制,最终到目前主流的async/await语法糖。
2026-04-22 15:05:26
409
原创 洛谷P3953 [NOIP 2017 提高组] 逛公园
摘要 题目P3953 [NOIP2017提高组] 逛公园要求计算从1号点到N号点的路径数,路径长度不超过最短路d加上K。需要处理两种特殊情况:1) 存在边权为0的环时输出-1;2) 路径数对P取模。 解题思路: 预处理反向图,计算各点到N的最短距离dis[u] 使用记忆化搜索,记录状态(剩余可走余量,当前节点) 剪枝:当剩余余量不足以到达终点时终止搜索 判断0权环:通过Tarjan算法找强连通分量,检查是否存在边权和为0的环 算法结合了最短路、记忆化搜索和图论知识,时空复杂度主要取决于K的大小。
2025-12-02 07:41:15
946
原创 洛谷P1514 [NOIP 2010 提高组] 引水入城
题目摘要:P1514 [NOIP 2010 提高组] 引水入城 给定一个N×M的网格,每个格子代表城市及其海拔。需要在第1行建造蓄水厂,水流只能从高海拔流向相邻低海拔城市。要求判断第N行所有城市是否能被覆盖,若能则求最少蓄水厂数量,否则统计无法覆盖的城市数。解法包括多源BFS标记可达性,并通过分析各蓄水厂覆盖范围来优化答案。
2025-12-01 12:56:02
1087
原创 洛谷P1032 [NOIP 2002 提高组] 字串变换(疑似错题)(STL,折半搜索)
本题考察字符串变换的最少步数问题,采用BFS算法解决。给定初始字符串A和目标字符串B,以及最多6条替换规则,要求在10步内找到A到B的最短变换路径。解题关键在于使用string的find和replace函数实现子串查找替换,并用unordered_set记录已访问状态以避免重复搜索。虽然题目标注为"疑似错题",但通过合理的BFS实现仍能正确求解。代码优化方面,使用unordered_set比unordered_map效率更高。最终输出最小步数或"NO ANSWER!"
2025-12-01 07:46:32
1148
原创 洛谷P1378 油滴扩展
题目要求在一个矩形框内放置油滴,油滴会扩展直到碰到边界或其他油滴。需要确定放置顺序使油滴总面积最大,输出剩余面积的最小值。 解法思路: 使用深度优先搜索枚举所有可能的油滴放置顺序 计算每个油滴能扩展的最大半径,考虑与边界和其他油滴的距离 维护剩余面积的最小值 最终结果四舍五入输出整数 关键点: 油滴扩展半径由到边界和已扩展油滴的最小距离决定 使用回溯法枚举所有排列顺序 当N≤6时,暴力搜索可行 时间复杂度:O(N!),适用于小数据范围N≤6的情况。
2025-11-30 00:36:40
932
原创 洛谷P5295 [北京省选集训2019] 图的难题
题目摘要: 本文研究了P5295 [北京省选集训2019] 图的难题,该问题要求判断给定的无向图能否将边划分为两个森林(即白色和黑色边子图均无环)。通过Nash-Williams定理,该条件等价于验证对于所有非空顶点子集S,满足|E(S)|≤2(|S|-1)。作者将其转化为最大权闭合子图问题,通过构建特殊网络流模型(边节点连接顶点节点,容量分别为1和2),利用最小割算法进行判断。关键结论指出:若最小割值≥m+2则有解。为优化效率,采用退流技术减少计算量,最终通过Dinic算法实现。代码部分展示了网络流模型的
2025-11-30 00:36:11
1393
原创 洛谷P5030 长脖子鹿放置(二分图最大匹配+网络流)
题目摘要:P5030 长脖子鹿放置 题目要求在一个N×M的棋盘上放置尽可能多的长脖子鹿(类似中国象棋的马,但按"目"字攻击且无"别马腿"规则),且不能互相攻击。部分格子禁止放置。解题思路是将棋盘转化为二分图,利用König定理将问题转化为求最大匹配,通过最大流算法求解。具体实现中,按行奇偶性构建二分图,使用Dinic算法计算最大流,最终答案为总可用格子数减去最大匹配数。输入包含棋盘尺寸和禁止位置,输出最多可放置的长脖子鹿数量。
2025-11-29 08:11:18
967
原创 洛谷P2857 [USACO06FEB] Steady Cow Assignment G
摘要: 题目描述将N头牛分配到B个容量有限的谷仓中,每头牛对谷仓有偏好排序。要求找到一种分配方案,使得所有牛被分配的谷仓排名范围(最高与最低排名之差+1)最小。解决方案采用网络流建模:将牛和谷仓分别作为源点和汇点,通过二分枚举可能的排名范围,利用Dinic算法验证当前范围是否可行。时间复杂度为O(NB²√(N+B)logB),由于B较小(B≤20),实际运行效率可接受。最终输出满足条件的最小排名范围值。
2025-11-29 08:09:50
842
原创 第十一届中国大学生程序设计竞赛 哈尔滨站(CCPC 2025 Harbin Site)赛后总结(VP)
摘要:本文记录了作者在VP CCPC 2025哈尔滨站比赛中的解题过程与反思。A题通过数论分析,将子集和的gcd转化为差值的gcd问题,最终推导出解法并给出代码实现。L题采用枚举+多源BFS策略处理网格路径问题,通过状态转移优化搜索效率。两题分别展示了数论推导和搜索算法的应用,对竞赛解题思路具有参考价值。(149字)
2025-11-28 07:29:53
1458
原创 洛谷P1361 小M的作物
本文探讨了洛谷题目P1361"小M的作物"的解法。该问题要求将n种作物分配到两块耕地A或B中,以获得最大收益。每种作物在不同耕地有不同收益,某些作物组合还能带来额外收益。解题思路是将问题转化为最小割模型:建立源点s和汇点t,作物节点分别与s和t相连,边权为在A或B的收益;组合收益通过建立虚拟节点处理。最终最大收益等于总可能收益减去最小割值。类似问题如P4313和P1646也可用此方法解决。
2025-11-28 07:29:24
700
原创 洛谷P1345 [USACO5.4] 奶牛的电信 Telecowmunication
摘要:题目要求通过删除最少数量的电脑节点,使得给定的两个电脑节点$c1$和$c2$无法通信。采用网络流算法,通过将每个电脑节点拆分为输入和输出节点,并在它们之间建立边权为1的边($c1$和$c2$对应的边权为无穷大),将问题转化为求最小割。最终使用Dinic算法求解最大流,即得到需要删除的最小电脑数量。
2025-11-27 08:21:22
1004
原创 洛谷P1439 两个排列的最长公共子序列
本文研究了排列的最长公共子序列(LCS)问题。通过将排列中的元素位置映射,将LCS问题转化为最长上升子序列(LIS)问题。针对LIS问题,提出了一种基于贪心+二分的优化算法:维护一个dp数组记录各长度LIS的最小末尾值,利用二分查找快速更新。该算法将时间复杂度从O(n²)优化至O(nlogn),适用于大数规模(n≤1e5)的数据。文中给出了完整代码实现,并通过坐标映射将LCS问题成功转化为LIS问题求解。
2025-11-27 08:20:10
876
原创 最大流(Dinic算法)
本文介绍了Dinic算法作为Edmonds-Karp算法的优化版本。Dinic通过构建分层图,在一次BFS后使用DFS同时增广多条路径,解决了Edmonds-Karp算法效率低下的问题。关键优化包括:层级限制(level)、当前弧优化(cur)以及边的编号技巧(异或1获取反向边)。算法时间复杂度为O(min(n^{2/3},m^{1/2})m),显著提升了最大流问题的求解效率。文中提供了完整的C++实现代码,并详细解释了各优化细节的实现原理。
2025-11-26 07:24:52
1801
原创 Educational Codeforces Round 184赛后总结
摘要:本文记录了作者在编程竞赛中的解题思路与反思。A题通过排序和复杂条件判断实现,但最终发现更简单的解法;B题通过分析字符串模式区分无限循环与有限情况,采用双指针计数;C题则转化为数学区间求解问题。作者总结应注重代码简化,避免过度复杂化实现。竞赛分数从1399提升至1464,重新进入青名段位。
2025-11-26 07:24:20
937
原创 洛谷P1570 KC 喝咖啡(二分+分数规划)
题目要求从n种调料中选出m种,使得咖啡的美味度总和与时间总和的比值最大。直接贪心排序选择会导致错误,因此采用二分法求解。 解法分析: 二分答案x,检查是否存在m种调料满足Σv_i/Σc_i ≥ x 通过变形转化为检验Σ(v_i - x*c_i) ≥ 0 将调料按v_i - x*c_i排序,取前m大求和判断 算法复杂度为O(n log n log(range)),其中n=200,可以高效解决问题。样例验证了算法的正确性。
2025-11-25 09:13:59
825
原创 Codeforces Round 1063 (Div. 2)赛后总结
文章摘要: 本文分享了作者在竞赛中的解题思路,包含三道题目。A题通过分析游戏规则,发现只需将序列排序后检查特定位置即可判定胜负,时间复杂度O(n)。B题构造题,通过找到排列中的最小值和最大值来构造可行解,若特定条件不满足则无解。C题利用双指针和集合维护连通性,通过单调性优化判断过程。三题均给出了详细的分析和代码实现,展示了算法竞赛中的常见解题技巧。
2025-11-24 00:21:01
684
原创 洛谷P3253 [JLOI2013] 删除物品
摘要:该文介绍了解决[JLOI2013]删除物品问题的算法。题目要求将两堆物品按优先级删除,每次只能移动或删除堆顶物品。作者提出将两堆物品拼接成一个序列,用树状数组维护区间和,实现高效计算最小移动步数。算法通过排序确定删除顺序,利用树状数组统计移动步数,时间复杂度为O((N1+N2)log(N1+N2)),适用于1e5数据规模。
2025-11-24 00:20:27
718
原创 洛谷P1429 平面最近点对(加强版)
本文介绍了求解平面最近点对问题的分治算法。通过对点集按x坐标排序后递归分治,算法在合并时利用鸽笼原理将跨区间的点对检查限制在7个点内,从而将时间复杂度优化至O(nlogn)。关键步骤包括:在递归边界暴力求解、归并排序维护y坐标顺序、检查带状区域内的候选点对。最终实现精确求解200,000个点中的最近点对距离,并保留4位小数输出。
2025-11-23 07:41:08
1219
原创 洛谷P3531 [POI 2012] LIT-Letters (非数字类逆序对)
摘要:本文讨论了洛谷题目P3531(POI 2012 LIT-Letters)的解法。题目要求将字符串a通过相邻字符交换变成字符串b的最小交换次数。核心思路是将问题转化为求逆序对个数,通过将目标字符串的字符位置离散化映射到原字符串,并使用树状数组计算逆序对数量。时间复杂度为O(nlogn)。该方法也适用于类似题目P5149和CF1430E。
2025-11-23 07:40:10
1175
原创 洛谷P1314 [NOIP 2011 提高组] 聪明的质监员(二分+前缀和)
摘要:题目要求通过调整参数W,使矿产检验结果y尽可能接近标准值s。解法采用二分法确定最优W值,利用前缀和预处理区间信息来快速计算检验值。时间复杂度为O((n+m)logW),其中n为矿石数,m为区间数。关键点在于发现y随W单调变化的性质,并使用前缀和优化区间查询。最终输出|y-s|的最小值。
2025-11-22 09:05:03
814
原创 洛谷P6225 [eJOI 2019] 异或橙子
摘要:本文提出了一种高效解决区间异或查询问题的算法。通过分析异或运算的性质,发现当查询区间端点奇偶性不同时结果为0;相同时只需计算奇/偶数位置上的异或和。基于此,使用两个树状数组分别维护奇偶位置的值,实现单点更新和区间查询。算法时间复杂度为O(nlogn),适用于大规模数据。代码实现中通过位运算优化,提高了计算效率。
2025-11-22 09:04:26
936
原创 最大流(Edmonds-Karp算法)
摘要:本文介绍了网络流中的最大流问题及其解决方法。作者因解题需求开始学习最大流算法,详细解释了流网络、流、割等基本概念,并阐述了最大流最小割定理的等价性。重点讲解了残量图构建和增广路径的思想,分析了Ford-Fulkerson方法及其改进版Edmonds-Karp算法的实现原理(使用BFS寻找最短增广路以保证O(VE²)复杂度)。最后提供了基于Edmonds-Karp算法的C++代码实现模板,并阐明反向边在流量调整中的关键作用。全文从理论基础到实践实现,系统性地介绍了最大流问题的求解方法。
2025-11-21 00:07:07
1429
原创 洛谷P1972 [SDOI2009] HH 的项链
摘要: 本文介绍了如何用树状数组离线处理区间不同元素查询问题。通过将查询按右端点排序,从左到右遍历时,对于每个元素保留最后一次出现的位置,用树状数组维护前缀和。当处理到某个查询区间 $[l,r]$ 时,只需查询 $[l,r]$ 内的前缀和即可得到答案。该方法时间复杂度为 $O(m\log m + n\log n)$,适用于静态查询场景。
2025-11-21 00:06:40
1298
原创 洛谷P2448 无尽的生命 (逆序对+离散化巧解)
摘要: 题目P2448要求计算经过多次位置交换后的序列中逆序对的数量。由于原始序列的规模过大(可达$2^{31}-1$),直接处理不可行。通过离散化将涉及的位置映射到连续下标,交换后形成新序列。逆序对的计算分两部分:离散化序列的逆序对数(通过归并排序或树状数组实现)和未交换连续位置间的贡献(通过坐标差调整)。总时间复杂度为$O(k\log k)$,适用于$k\leq 10^5$的数据规模。
2025-11-20 00:05:56
1112
原创 洛谷P5094 [USACO04OPEN] MooFest G 加强版
本文提出了一种使用树状数组高效解决奶牛交流问题的算法。通过将奶牛按听力值排序,并利用两个树状数组动态维护位置信息和计数,可以快速计算每头奶牛与之前所有奶牛的距离总和。时间复杂度为O(nlogn),相比线段树实现更简洁高效。该方法巧妙地利用了树状数组的前缀查询特性,避免了直接计算的复杂度,为类似区间统计问题提供了参考。
2025-11-20 00:04:16
1105
原创 洛谷P2880 [USACO07JAN] Balanced Lineup G
本文探讨了解决静态区间最值问题的两种数据结构:ST表和树状数组。ST表采用倍增思想预处理区间最值,查询复杂度O(1),适合静态数据;树状数组通过递归查询实现区间最值,复杂度O(log²n)。文章比较了二者的优缺点,指出线段树更适合动态区间最值问题。ST表以其高效查询成为解决静态区间问题的优选方案。
2025-11-19 07:52:31
812
原创 树状数组笔记
本文回顾了树状数组的实现原理与应用,通过与线段树的对比展示了其效率优势。树状数组通过维护特殊区间实现O(logn)的单点更新和前缀查询,其核心在于lowbit操作确定管辖范围。文中提供了完整的C++实现模板,包括初始化、更新、查询等方法。与线段树的性能对比显示,在处理单点更新和区间求和时,树状数组更具优势。文章还包含线段树的实现代码作为参照,强调树状数组实现更为简洁高效的特点。
2025-11-19 07:50:37
436
原创 P2085 最小函数值
摘要:本文提出使用小根堆求解n个二次函数在正整数x取值时的前m个最小值。算法初始时计算每个函数x=1时的值压入堆中,然后循环m次取出最小值,并将该函数的下一个x值计算结果重新入堆。这种方法通过优先队列有效维护候选解的有序性,确保每次都能取出当前最小值。
2025-11-18 13:38:53
398
原创 2025.11.3(对顶堆)
本文探讨了如何使用对顶堆动态维护序列第k小值。通过构建大根堆(前k小元素)和小根堆(剩余元素),在插入元素时根据当前堆大小进行相应调整:元素x根据与大根堆顶t的比较决定插入位置,并保持两堆元素有序。查询直接取大根堆顶,调整k值时通过堆间元素转移实现。该方法能在O(logn)时间内高效完成动态维护。
2025-11-18 13:37:52
460
空空如也
2017年NOIP普及组初赛阅读程序写结果第3题
2021-07-22
求教看一下这是什么问题
2021-05-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅