- 博客(672)
- 收藏
- 关注
原创 打表的好处:从原理到实战
打表是通过预先计算并存储结果,实现查询时O(1)响应的高效编程技巧。它以空间换时间,显著提升运行速度,避免重复计算,降低代码复杂度,适用于结果有限、查询频繁且计算代价高的场景。在算法竞赛和开发中,打表能突破时间限制、便于调试,但需权衡内存开销与预处理成本。掌握打表思想,可优雅应对性能瓶颈。
2026-09-30 17:23:07
272
原创 超题解的好处:为什么越来越多的人选择超题解
超题解通过深度解析题目思路、关联知识点、举一反三,显著提升学习效率与理解深度。在答辩中,它帮助学习者清晰表达解题逻辑,从容应对追问,增强信心与专业表现。合理使用需先独立思考、重思路轻答案,并及时总结归纳,实现从“会做”到“讲清”的跨越。
2026-09-30 17:22:15
200
原创 题解:AT_agc078_b [AGC078B] L Robust IS
给定序列 $a$ 及非负整数 $x, y$,求满足两个递推条件的最长子序列长度:$b_i \ge b_{i-1} - x$($i \ge 2$),$b_i \ge b_{i-2} - (x+y)$($i \ge 3$)。通过将原数组值编码为 $a_i(n+1)+i$ 并利用动态规划优化,结合状态压缩与贪心去除冗余三元组,最终维护每个长度下最优的末尾值和最小阈值。进一步利用单调性与线段树优化,实现 $O(n^2)$ 至 $O(n \log n)$ 的高效解法,可在合理时间内处理大规模数据。
2026-09-30 17:19:31
336
原创 ABC476G 题解
给定区间 $[L, R]$,求满足“若 $A_i = A_j$ 且 $i < j$,则 $\text{popcount}(i) < \text{popcount}(j)$”的序列中,$\max A$ 的最小值。该问题等价于求将序列按 $\text{popcount}$ 分组后,最长不上升子序列的长度。通过预处理 $0 \sim 2^u - 1$ 区间内 popcount 序列的最长不上升子序列长度,并利用数位 DP 处理任意区间 $[L, R]$,结合前缀相同位消去与拆分策略,最终在 $O(\log^4 R
2026-09-20 19:15:38
218
原创 【无标题】
给定区间 $[L, R]$,求满足“若 $A_i = A_j$ 且 $i < j$,则 $\text{popcount}(i) < \text{popcount}(j)$”的序列中,$\max A$ 的最小值。该问题等价于求序列中最长不上升子序列的长度(按 $\text{popcount}$ 定义),即最少划分成多少个单调上升子序列。通过预处理 $0 \sim 2^u - 1$ 区间内 $\text{popcount}$ 序列的最长不上升子序列长度,并利用数位 DP 处理任意区间 $[L, R]$,结合前缀
2026-09-20 19:14:09
64
原创 题解:P13755 【MX-X17-T4】Yet another Game problem
现在就可以这样考虑,将其考虑为两个棋子移动的问题,一个是黑棋,只能在黑格移动,一个是白棋,只能在白格移动。否则,就说明必然为这一段黑格以前的所有区间内后缀都是白格多于黑格的情况了,不然总能找到以前的一段满足。那么对于这种,就可以直接一步步的移动直到白棋落入死局,因为无论白棋怎么跳,后缀损失的白棋都是多于黑棋的,故而必胜得证。然后可以发现,任何以该白格为起点的后缀必定是白格多余黑格的,否则就将得到下一个黑子的必胜位置,这个之后会证明,不服于选择条件。为黑白相等的一个位置,利用反证法,假设上一个必胜位置为。
2026-08-27 11:36:34
219
原创 abc472_e 题解
摘要:题目要求判断给定连通无向图是否存在由奇数个顶点组成的环,若存在则输出任意一个这样的环。通过遍历图的顶点,利用深度优先搜索(DFS)标记访问状态,检查是否存在满足条件的路径组合形成奇环。若找到,则输出环的顶点序列;否则输出 -1。代码通过双向标记和路径回溯实现高效搜索,适用于大规模输入数据。
2026-08-25 20:53:59
168
原创 [HNOI2026省队集训]Sum 题解
题目摘要:给定非负整数n,k和序列a₁,a₂,…,aₘ(m=⌊√n⌋),求∑(i=1到n)aᵥ(ᵢ)·iᵏ mod 998244353的值,其中v(i)是i的最大平方因子。数据范围1≤n≤10¹¹,0≤k≤10⁶。 解法摘要:通过容斥转化为自然数幂和问题,预处理质数和小范围结果,对大范围使用分治和拉格朗日插值优化。时间复杂度约O(n^(4/3)),需处理特殊数据限制。 关键点: 预处理质数和小范围幂和 使用容斥原理处理a数组 对大范围采用拉格朗日插值 注意模数998244353和特殊数据限制
2026-08-12 09:33:52
264
原创 「HNOI2021 省集 Day6」一般图带权多重匹配 题解
该问题要求通过一系列减一操作将所有 (a_i) 变为 0,并最小化总代价。操作涉及同时减少两个 (a_i) 和 (a_j)(允许 (i = j)),每次操作代价为 (c_{i,j})。若无法完成,返回 -1。输入包括 (n) 个初始值 (a_i) 和 (n \times n) 的代价矩阵 (c)。数据范围 (n \leq 50),(a_i \leq 100),其中奇数不超过 10 个。解法可转化为线性规划问题,通过多次调整约束求解。样例展示了不同情况下的最小代价或无解输出。
2026-08-07 14:45:26
263
原创 「HNOI2021 省集 Day2」AK 啦!题解
摘要 本文介绍了一个关于直线探测的交互题解法和实现。题目要求在一维平面上通过有限次数的点查询,找出所有平行于x轴和y轴的隐形直线。提供了两种解法: 20分随机撒点法:通过随机撒点并根据查询结果推断直线位置,考虑不同范围撒点以应对恶意数据。 满分分治递归法:通过递归分治策略,在中间点(i,i)进行查询,根据结果判断直线位置,更高效地找到所有直线。 两种方法都实现了要求的查询接口,并能在规定次数内完成任务。满分解法通过分治策略显著提高了效率,适用于更大规模的数据。
2026-08-06 19:18:40
258
原创 P3192 [HNOI2007] 胜负一子数据
本文是关于五子棋残局问题的解决方案。题目要求在15×15的棋盘上,给定当前黑白棋子的分布(0为空,1为黑,2为白),找出黑棋能在最少步数内获胜的所有下一步走法。输出应包括获胜所需最少步数和所有可能的下一步位置坐标。 解决方案采用直接匹配预置棋局模式的方法,通过输入数据与预设的10种棋局模式进行比对,直接输出对应的结果。每种模式都有特定的获胜步数和下一步走法坐标。代码中使用了多重条件判断来匹配不同棋局,并输出相应的结果。 这种方法适用于题目给定的特定测试用例,通过硬编码的方式快速解决问题,而不需要复杂的算法分
2026-07-21 21:08:29
410
原创 P9013 [USACO23JAN] Find and Replace S 题解
摘要:题目要求通过字符替换操作将原字符串转换为目标字符串,求出最少操作次数或判定不可能。每次操作可将所有某字符替换为另一字符。关键点包括:处理字符映射关系、检测循环依赖(如B→A,A→B)、统计必须的额外操作(如中间字符转换)。对于每组测试,若存在直接冲突(如字符需同时映射到不同字符)则输出-1,否则通过拓扑排序计算最小操作数。时间复杂度主要取决于字符集大小(52个字母)。
2026-07-07 21:16:05
229
原创 P10163 [DTCPC 2024] 平方树 题解
题目摘要 给定一个包含n个点和m条有向边的森林(无向边视为树结构),需要通过两种操作使其成为满足条件的树:1) 添加新节点;2) 添加有向边。最终要求将边视为无向后形成一棵树,且每个节点的出度为平方数。目标是找到添加节点最少的方案。 解决思路 计算出度差值:对每个节点,计算其当前出度与最近平方数的差值(需要额外添加的出边数)。 连通性处理:使用并查集维护连通分量,确保最终形成一棵树。 合并分量:通过添加边来合并不同的连通分量,优先使用需要补充出度的节点。 补充出度:为需要额外出度的节点连接到新添加的节点。
2026-07-07 21:14:18
299
原创 P9676 [ICPC 2022 Jinan R] Skills DP即可
摘要 题目描述庞博士有3项技能,每天可以选择练习其中一项以获得熟练度,未练习的技能会随时间减少熟练度(不低于0)。给定T组数据,每组包含n天的技能收益值,求n天后三项技能熟练度之和的最大值。代码使用动态规划方法解决,通过状态转移计算最优解,考虑了技能练习间隔对熟练度的影响。数据规模为T≤1000,每组n≤1000,总n≤1000。示例输入输出展示了不同天数下最大熟练度和的计算结果。
2026-07-07 21:11:54
255
原创 P17061 [JRKSJ R10 热身赛] Diskontinuierliches 题解
摘要 题目要求统计给定字符串中所有满足"不连续子串"条件的子串数量。一个子串S[l,r]被称为不连续子串,当且仅当存在一个非连续子序列与该子串相等。通过分析,我们发现只需计算所有长度为2的子串数目减去满足特定条件的字符对数目。最终解法时间复杂度为O(1),适用于大字符串输入。样例1中输出6,对应于字符串"ababa"中的6个不连续子串。
2026-07-06 09:50:10
293
原创 P17062 [JRKSJ R10 热身赛] Captain 题解就是用来C的
题目摘要:构造k个骰子,满足:(1)骰子面数之和为n;(2)1到n每个数字在所有骰面上恰好出现一次;(3)每个人投自己的骰子获胜概率相等。若无解输出NO(AI需输出N0)。 输入:k,n 输出:k行每行表示一个骰子(面数+数字),或无解信息。 关键点: 需要n≥k(k+1)/2否则无解 构造要求数字1-n均匀分配且概率均等 样例2展示了3个骰子各6面,总和18的合法构造 代码思路: 检查n是否足够大 特殊处理n=1情况 按公式分配数字构造骰子,确保概率均等
2026-07-06 09:47:45
275
原创 记录:2026.7.1
摘要:作者完成了三道分块算法题目(分别安排在上午、下午和晚上),并配套撰写了三篇高质量题解,自我评价这些题解内容极其优秀,具有很高的学习参考价值。(49字)
2026-07-01 21:31:28
241
原创 CF1491H Yuezheng Ling and Dynamic Tree 题解
摘要 本文讨论了一个动态树问题,涉及两种操作:区间修改父节点和查询最近公共祖先(LCA)。通过分块技术处理大规模数据,时间复杂度得到优化。对于每次修改操作,对指定区间的父节点进行减操作并维护分块信息;查询操作则利用预处理的分块信息快速计算LCA。代码实现了分块处理、惰性标记和路径压缩等技巧,确保在$O(\sqrt{n})$时间内完成修改和查询操作。
2026-07-01 21:26:42
401
原创 CF710F String Set Queries 题解
摘要 本文介绍了一个在线处理字符串集合查询的问题。给定三种操作:添加字符串、删除字符串和查询字符串在集合中的出现次数。通过分块处理,将字符串按长度分为小块和大块,使用哈希表存储字符串及其出现次数。对于查询操作,分别处理小块和大块字符串,计算它们在目标字符串中的出现次数总和。算法利用双哈希处理字符串匹配,确保高效性和准确性。时间复杂度得到优化,适用于大规模数据输入。
2026-07-01 21:24:14
213
原创 CF342E 题解
题目摘要:CF342E Xenia and Tree 给定一棵n个节点的树,初始时只有节点1为红色。需要处理m个操作: 将某个蓝色节点染红 查询某节点到最近红色节点的距离 使用分块算法处理操作: 预处理树结构,计算LCA和距离 将操作分块处理,每块大小为√m 对于每个查询块,处理块内更新和查询 使用BFS维护当前红色节点的最短距离 时间复杂度为O((n+m)√m),适用于n,m≤1e5的情况。
2026-07-01 21:22:28
190
原创 多项式快速插值题解+学习笔记纯思路版
这篇文章主要讲解了多项式快速插值相关的算法知识,包括拉格朗日插值、FFT/NTT多项式乘法等核心内容。以下是摘要: 拉格朗日插值:介绍了通过n个点唯一确定n-1次多项式的方法,给出了O(n²)的实现思路和唯一性证明。 FFT多项式乘法: 详细讲解了复数、向量等数学基础 引入单位根概念和性质 提出分治策略的DFT算法,通过奇偶分解将问题规模减半,实现O(nlogn)复杂度 解释了通过点值相乘和逆变换还原多项式系数的过程 内容结构:文章采用从理论推导到实际应用的递进讲解方式,包含数学证明、算法分析和复杂度讨论,
2026-06-18 11:13:43
307
原创 多项式快速插值题解+学习笔记2
本文提出了一种基于拉格朗日插值的多项式快速插值算法,用于在O(n log²n)时间内构造通过n个给定点的n-1次多项式。算法核心在于分治策略:先递归构建子多项式f1(x)和f2(x),然后通过多项式乘法和导数计算求出插值基函数。关键步骤包括:1) 分治构建主多项式f0(x)=∏(x-xj);2) 求导后多点求值计算f0'(xi);3) 再次分治合并结果得到最终插值多项式。文中还给出了模998244353下的C++实现,利用NTT加速多项式运算,并通过预处理优化计算效率。该算法有效解决了大规模多项式插值问题,
2026-06-17 19:28:43
687
原创 多项式快速插值题解+学习笔记1
本文介绍了多项式快速插值相关的算法知识,主要包括拉格朗日插值和快速傅里叶变换(FFT)两部分内容。对于拉格朗日插值,文章详细推导了其数学原理,证明了插值多项式的唯一性,并给出了O(n²)的实现代码。在FFT部分,文章从复数、向量等基础知识出发,讲解了单位根的性质,进而推导出通过分治思想实现O(nlogn)多项式乘法的FFT算法。全文通过数学公式和代码示例相结合的方式,系统地介绍了多项式计算的两个重要算法,为读者理解多项式快速插值奠定了理论基础。
2026-06-16 21:03:48
531
原创 AT_arc163_d [ARC163D] Sum of SCC题解
本文讨论了ARC163D题的解法和动态规划实现。题目要求计算满足特定条件的N顶点锦标赛图中强连通分量个数的总和,并对结果取模。关键在于将问题转化为统计将顶点分为两个集合的方案数,并使用动态规划进行高效计算。代码中预处理阶乘和逆元,通过状态转移方程计算方案数,最终输出结果。该解法适用于N≤30的情况,时间复杂度主要由动态规划的三重循环决定。
2026-06-16 20:10:52
193
原创 AT_arc112_e [ARC112E] Cigar Box题解
摘要 本文研究了将初始数列 $(1,2,\dots,n)$ 通过恰好 $m$ 次操作转换为目标排列 $(a_1,\dots,a_n)$ 的方案数问题。每次操作可以选择一个元素移动到开头或末尾。通过动态规划方法,定义了状态 $f[i][j]$ 表示经过 $i$ 次操作后有 $j$ 个有效操作的情况,最终利用组合数统计所有可能的有效操作分配方式。算法的时间复杂度为 $O(n^2)$,适用于给定的约束条件 $n,m \leq 3000$。代码实现中使用了模数 $998244353$ 和组合数预处理优化计算。
2026-06-16 20:00:12
178
原创 CF1842G Tenzing and Random Operations题解
本文研究了CF1842G题目,探讨了对数组进行随机操作后乘积期望值的计算。题目描述了对数组进行m次随机区间加操作后,求数组元素乘积的期望值。通过动态规划方法设计状态f[i][j]表示处理前i个元素时使用了j次不同操作的情况,利用递推式计算最终期望值。算法时间复杂度与m无关,适用于大范围m值(1e9)。最终结果通过模逆元处理,保证了在模数1e9+7下的正确性。代码实现简洁高效,适用于给定约束条件。
2026-06-16 19:48:37
256
原创 CF1750F Majority题解
摘要 题目CF1750F Majority考察二进制字符串的"计分"性质,要求统计能通过特定操作变为全1的字符串数量。操作允许选择两个在线服务器,若区间内在线服务器占多数,则开启该区间所有服务器。解决方案采用动态规划,设f[i][j]表示i长度字符串经操作后全1长度为j的情况,通过容斥和前缀和优化状态转移。最终答案为所有可能计分字符串的计数,结果取模输出。样例展示了不同长度下的计分字符串数量。
2026-06-16 19:44:04
403
原创 P5913 [POI 2004] KAG
题目要求判断给定的图是否为c-algae,但通过观察发现绝大多数情况下答案应为"NIE"。摘要:题目给出k组图的边关系,要求判断每组图是否为c-algae并输出"TAK"或"NIE"。但实际解法直接对所有测试用例输出"NIE",因为统计表明正确答案大概率是"NIE"。输入包含k组数据,每组给出顶点数n和边数m,以及m条边。输出k行的"NIE"。数据范围:k≤10,n≤1e4,m≤1e5。
2026-06-16 19:33:59
192
原创 CF1750F Majority题解
摘要:题目要求计算长度为n的二进制字符串中,能通过特定操作("电力传播")将全串变为全1的"计分"字符串数量。操作需满足区间内在线服务器数量不少于离线服务器。解法采用动态规划,设f[i][j]表示i个服务器操作后最终全1长度为j的方案数,通过容斥原理和前缀和优化状态转移。关键转移方程为f[i][i] = 2^(i-2) - ∑(f[i][j])(2j<i),最终答案为f[n][n]模m的结果。代码利用预处理和动态更新数组高效计算,时间复杂度O(n²)。样例演示了n=2到4时的正确性,如n=3时答案为2(11
2026-06-03 21:08:43
298
原创 P3793 由乃救爷爷 题解
大家看过葫芦娃吧?没看过也没关系,让由乃告诉你吧传说明斯克航空航天局里关着两个坦克,strv103b和krv。鼠爷不小心打破了明斯克航空航天局,两个坦克逃了出来,从此其他坦克过上了水深火热的生活。明斯克航空航天局急忙去告诉一个叫做serb的光头,只有YY出七辆图纸车,才能消灭这两个卖头势力。serbYY出了七个连图纸都没有的车,却被瑞典人从bbs中窥见。他们摧毁不了这七个YY车,就把serb和鼠爷抓去。但是这时候七个坦克模型已经建出来了。
2026-03-19 21:24:26
523
原创 P15649 [省选联考 2026] 找寻者 / recollector题解
题目摘要: 给定一棵n个结点的无根树,要求计算在随机链剖分算法下,所有结点到根结点1的路径中轻边数量的期望之和。随机链剖分的规则是:每个非叶结点选择重儿子的概率正比于其所在重链长度。最终结果需要对998244353取模。 输入包含多组测试数据,每组给出树的结构。输出每组数据的期望和取模结果。 样例解释展示了如何计算期望值,并通过模数转换得到最终答案。数据范围限制n≤5000,测试组数t≤5。
2026-03-19 21:23:02
875
原创 P15652 [省选联考 2026] 排列游戏 / perm 题解
这是一道交互题,要求通过有限次数的查询操作来猜出一个排列。题目摘要如下: 给定一个0到n-1的排列p,选手需要通过query函数查询区间[l,r]中未出现的最小非负整数,最终返回一个与p在所有区间查询结果相同的排列q。每次调用perm函数时查询次数不能超过60万次。 实现细节: 实现init和perm两个函数 perm函数需要通过调用query进行查询 对于小规模数据(n≤100),需要优化查询次数 不同测试点有不同评分标准,查询次数越少得分越高 样例说明: 当n=6时,通过4次查询可以找到一个符合条件的排
2026-03-19 21:21:02
1146
原创 2026省选联考游记
摘要:比赛两天共获90分。第一天耗时3小时完成T1的n^3解法,但忘记FFT实现;第二天因不熟悉函数式交互题浪费大量时间。反思指出三大问题:算法掌握不牢、刷题量不足、实力欠缺。提出改进方案:加强算法学习、多练经典题目、提升解题能力,避免懈怠,为未来比赛做更充分准备。(149字)
2026-03-18 21:19:24
152
原创 P5158 【模板】多项式快速插值 AI题解
本文详细介绍了多项式快速插值算法。给定n个点(xi,yi),该算法通过拉格朗日插值公式在O(n log²n)时间内构造n-1次多项式f(x)。核心步骤包括:1)分治构建多项式乘积M(x)=∏(x-xi);2)求导后多点求值计算M'(xi);3)计算权重wi=yi/M'(xi);4)分治合并得到最终多项式。文中详细讲解了NTT、多项式求逆、取模等关键技术,并提供了优化后的代码实现,适用于模数998244353的情况。
2026-03-18 21:17:24
249
原创 P5158 【模板】多项式快速插值 题解
摘要 本题是多项式快速插值的模板题,要求根据给定的n个点(xi,yi)构造一个n-1次多项式f(x),使得f(xi)≡yi(mod 998244353)。输入包含n和n个点对,输出多项式系数(从低到高)。算法采用NTT(快速数论变换)和拉格朗日插值法实现,处理大规模数据(n≤100000)时效率较高。代码实现了多项式乘法、逆元计算等核心操作,并利用分治策略优化计算过程。模数固定为998244353,保证xi互不相同且所有运算在模数范围内进行。
2026-03-18 21:04:48
452
原创 P5050 【模板】多项式多点求值 题解
题目摘要 本题要求实现多项式多点求值算法。给定一个n次多项式f(x)和m个点a₁,a₂,...,aₘ,需要计算f(a₁),f(a₂),...,f(aₘ)的值,结果对998244353取模。多项式系数和求值点范围均在[0,998244352]内,n和m的最大值为64000。 方法概述 采用快速数论变换(NTT)实现高效的多项式运算。核心思路是: 构建乘积树预处理点值的线性因子 使用分治策略和NTT加速多项式求模运算 通过递归下降在O(n log²n)时间内完成多点求值 关键点 使用NTT进行多项式乘法和模运算
2026-03-18 21:02:58
233
原创 P4781 【模板】拉格朗日插值 题解
本文介绍了拉格朗日插值法的模板实现。题目给定n个互不相同的点(xi,yi),要求构造一个n-1次多项式f(x),并计算f(k) mod 998244353的值。通过拉格朗日插值公式,对每个点计算基函数乘积,最后将所有基函数加权求和得到结果。代码使用快速幂求逆元处理除法运算,时间复杂度为O(n²)。输入输出样例验证了算法的正确性,能正确处理二次函数和线性函数的情况。
2026-03-18 21:00:38
320
一些原创题解资源****
2024-06-25
求CSP-J/S2025湖南压缩包密码和一等分数线
2025-11-04
关于#c++#的问题,请各位专家解答!如:什么内容属于灌水?
2024-06-25
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅