- 博客(23)
- 收藏
- 关注
原创 洛谷P4045 [JSOI2009] 密码 题解
本题要求在长度为L的字符串中包含所有给定子串,采用AC自动机结合状压DP求解。首先构建AC自动机预处理子串信息,使用DP计算方案数(dp[i][u][s]表示处理i位后在节点u状态为s的方案数)。当方案数≤42时,通过两次DFS输出所有可能字符串(第一次标记可行状态,第二次回溯输出具体方案)。时间复杂度主要取决于自动机构建和状态转移,空间优化通过复用DP数组实现。
2025-12-20 16:40:28
953
原创 [PA 2017] Iloczyn 题解
题目要求找出不超过n的最大正整数,其质因数仅包含给定质数集合中的数。通过深度优先搜索枚举质数组合,并采用两种优化:1) 将质数降序排列以快速找到大解;2) 当当前乘积z满足⌊n/z⌋=⌊ans/z⌋时剪枝,避免无效搜索。代码使用递归实现DFS,通过优化显著提升效率。最终输出满足条件的最大数ans。
2025-12-19 21:32:40
969
原创 SP2530 GNY07H-Tiling a Grid With Dominoes 题解
本文研究了用1*2矩形铺满4*n平面的问题。采用状压DP方法,将每行状态表示为0/1串,f[i][S]表示第i行状态为S的方案数。通过DFS实现状态转移:前一行0可竖放,连续00可横放,1必须转为0。代码实现了多测试用例处理,预处理状态转移后累计方案数。该方法利用位运算高效处理状态转移,时间复杂度与平面宽度相关,适用于固定宽度情况。
2025-12-09 21:17:48
930
原创 AT_agc047_b First Second 题解
题目要求在n个互不相同的字符串中,统计满足特定操作条件的无序字符串对数量。关键思路是将字符串按长度排序,利用哈希优化后缀匹配。对于每个字符串,枚举其后缀,使用map记录可匹配的字符组合,并通过标记数组统计有效对数。算法通过预处理哈希值优化匹配效率,最终线性扫描统计答案。该解法巧妙利用了哈希和排序技术,将时间复杂度控制在合理范围内。
2025-12-09 21:09:43
626
原创 洛谷P4587 [FJOI2016] 神秘数 题解
本文提出了一种求解可重集合"神秘数"的算法。神秘数定义为最小的无法由子集和表示的正整数。算法通过逐步插入有序元素并动态更新神秘数,结合主席树高效查询区间和。时间复杂度为O(n log n),适用于大规模数据。代码实现使用主席树维护区间和,通过迭代方式快速计算神秘数,已通过在线评测系统验证。算法高效解决了区间查询问题,适用于序列处理场景。
2025-11-12 12:23:16
491
原创 CSP-J 2025第二轮 完整题解
本文介绍了CSP-J2025的四个编程题目及解法:1)字符串中数字重组最大数(统计数字频次逆向输出);2)蛇形座位分配(优先队列排序+位置计算);3)最多不相交异或区间(前缀异或+动态规划);4)多边形组合方案(排序+动态计数)。所有解法均通过系统测试(AC)。
2025-11-12 09:37:43
1000
原创 CSP-J 2024第二轮 完整题解
本文讲诉了2024CSP-J的四个编程题的解法。T1:用map统计扑克牌种类数,计算补全52张所需的最少牌数。T2:模拟地图探险过程,处理转向和移动操作,统计访问的格子数。T3:根据木棍数n,按规则拼接最小数字,重点讨论n≡3(mod7)等特殊情况。T4:使用动态规划判断能否进行r轮接龙游戏,最后一轮以数字c结尾,处理多轮状态转移和玩家限制条件。
2025-10-31 11:08:59
1100
原创 洛谷P1972 [SDOI2009] HH的项链/[模版] 区间内有多少不同的数字 题解
本文探讨了区间不同数字统计问题的多种解法:1)离线树状数组(O(nlogn)最快实现),通过维护最后一次出现位置的前缀和求解;2)主席树(O(nlogn)但常数大),支持在线查询;3)分块(O(n√n)),预处理块间信息;4)基础莫队(O(n√n)),通过特殊排序优化查询顺序。各方法均体现了不同数据结构在区间查询问题中的独特优势。
2025-10-31 08:59:25
1259
原创 洛谷P4216 [SCOI2015] 情报传递 题解
本文研究了一种基于主席树的树形结构操作方法。给定一棵有n个节点且根节点已知的树,进行m次操作:1)标记节点并随时间增加权值;2)查询路径上权值大于c的节点数。通过将查询条件转化为时间戳比较,利用主席树维护各节点标记时间,并采用树上差分统计路径信息。实现时结合树链剖分求LCA,最终可在O(log n)时间复杂度内完成查询。代码通过了严格测试,验证了算法的正确性和高效性。
2025-10-29 17:08:02
484
原创 洛谷P2486 [SDOI2011] 染色 题解
本文提出了一种基于重链剖分和线段树的算法,用于解决树上路径操作问题。算法主要处理两种操作:1)路径覆盖,将指定路径上的节点值统一修改;2)路径查询,统计路径上连续相同数字段的数量。通过将树转化为重链结构,利用线段树维护区间信息,并设计特殊的合并策略处理重链间的连接。查询时采用分链处理并交换左右端点实现正确合并。实验证明该方法能高效解决大规模树形结构上的路径操作问题。
2025-10-28 16:16:40
897
原创 C++算法讲解:背包DP
本文介绍了六种常见的背包问题及其解法:1) 0-1背包(物品不可分割);2) 完全背包(物品无限);3) 分组背包(组内互斥);4) 多维背包(多限制条件);5) 依赖背包(主附件关系);6) 多重背包(有限数量物品)。文章通过例题分析,给出了各种背包问题的状态转移方程和代码实现,重点讲解了0-1背包的基础作用及其变形,并提供了二进制优化等技巧。最后指出这些算法在信息竞赛中的重要性,推荐了相关练习题单。
2025-10-17 19:40:36
977
转载 拓扑学与电路分析
拓扑学通过研究电路连接关系而非元件细节,为电路分析提供了高效工具。核心在于欧拉公式(V−E+F=2)推导出的拓扑公式C=E−V+1,其中C代表独立回路数(洞的数量)。判断电路有效性需满足:1)无断路(C≥0且E≥V−1);2)无短路(C≥1且每个回路含负载)。该方法适用于平面和非平面电路(引入亏格概念),并已拓展至量子拓扑电路等前沿领域,实现抗干扰电流传输和故障诊断。拓扑学从基础电路分析到量子技术创新,展现了强大的应用潜力。
2025-10-17 14:28:34
121
原创 洛谷B3637 最长上升子序列 题解
本文介绍了三种求解最长上升子序列(LIS)的算法:1. O(n²)的常规动态规划,通过双重循环比较元素;2. O(nlogn)的树状数组优化DP,利用数据结构优化查询;3. O(nlogn)的二分+贪心法,维护最小末尾值。其中解法1最基础但效率较低,解法2需要树状数组知识,解法3代码简洁高效。建议在考试中选择解法2或解法3来应对LIS问题。
2025-09-26 17:25:46
557
原创 洛谷P2471 [SCOI2007] 降雨量 题解
题目要求判断关于降雨量的陈述真假性。给定n个年份及其降雨量,处理m条“X年是自Y年以来降雨量最多的”的陈述。根据X和Y年份数据是否已知,分四种情况处理:1)两者未知输出“maybe”;2)仅Y已知时检查中间年份最大降雨量;3)仅X已知时类似处理;4)两者已知时需满足Y年降雨量≥X年,且中间年份降雨量均<X年。使用线段树实现区间最大值查询,时间复杂度为O(n + m log n)。该解法通过分类讨论和高效查询,确保了对各种情况的正确处理。
2025-09-26 16:15:01
702
1
原创 洛谷P4362 [NOI2002] 贪吃的九头龙 题解
题目要求将n个节点的树划分为m组,其中第1组必须包含根节点且恰好k个节点。同组节点间的边权会累加为“难受值”,需最小化该值。解法采用树形DP,状态f[u][i][0/1]表示以u为根的子树中i个节点在第1组且u是否在第1组时的最小难受值。转移时考虑子节点分组情况,当m=2时同组边权全计入,否则仅当两节点均在第1组时才计入。预处理排除n-m+1<k的无解情况,最终答案为f[1][k][1]。代码通过DFS实现状态转移,时间复杂度为O(nk²)。
2025-09-23 20:00:17
670
原创 洛谷P1129 [ZJOI2007] 矩阵游戏 题解
该问题要求判断n×n的01矩阵是否可以通过行列交换使主对角线全为1。解法是将矩阵转化为二分图模型,其中行和列作为两个顶点集,矩阵中的1表示边。通过匈牙利算法计算二分图的最大匹配,若匹配数等于n则可行,否则不可行。代码实现了该算法并处理了多组测试数据。
2025-09-23 15:19:48
459
原创 洛谷P1896 [SCOI2005] 互不侵犯 题解
本文提出了一种基于状态压缩动态规划的解法,用于解决N×N棋盘放置K个互不攻击的国王问题。针对n≤9的小规模棋盘,采用二进制状态表示每行棋子分布,预处理所有合法单行状态。通过位运算判断相邻行间的合法性,设计三维DP数组dp[i][s][j]表示处理到第i行、状态为s、已放置j个国王的方案数。转移时枚举当前行和上一行的合法状态组合,利用位运算快速验证条件。最终累加所有合法终态得到答案。时间复杂度与状态数相关,在n=9时仍高效可行。代码实现中需要注意使用long long类型防止溢出。
2025-09-19 19:21:47
627
原创 洛谷P3201 [HNOI2009] 梦幻布丁 题解
该文提出了一种基于线段树合并的算法,用于处理序列中连续相同数字段落的统计问题。通过为每种数字建立动态开点线段树,记录段落数、左右端点信息,实现了高效合并操作。合并时通过判断相邻端点是否连续来更新段落计数。对于修改操作,采用线段树合并策略,同时动态维护全局段落总数。算法时间复杂度为O(n log n),适用于大规模数据。代码实现展示了如何初始化线段树、处理查询和修改操作,并通过AC记录验证了其正确性和高效性。
2025-09-16 21:43:50
399
原创 洛谷P2048 [NOI2010] 超级钢琴 题解
题目要求在长度为n的序列中选取k个长度在[ql,qr]内的不同连续子段,使元素和最大。解法采用前缀和预处理后,使用优先队列(堆)维护三元组(u,l,r),表示以u为起点、终点在[l,r]的最大子段。通过线段树实现RMQ快速查询最优终点t,每次取出堆顶元素后将其分割为(u,l,t-1)和(u,t+1,r)重新入堆,确保不重复且覆盖所有可能情况。算法时间复杂度主要取决于线段树和堆操作,能够高效解决问题。
2025-09-16 17:06:27
432
原创 洛谷P1972 [SDOI2009] HH的项链 题解(莫队)
本文介绍了使用莫队算法解决区间不同数字统计问题的方法。通过将序列分块并对查询进行特殊排序,将时间复杂度从O(nm)优化到O(n√n)。文章详细说明了暴力扫描法的缺陷,阐述了莫队算法的排序原理和奇偶性优化技巧,并提供了完整代码实现框架,包括分块处理、查询排序和双指针移动策略。该算法在保持较低时间复杂度的同时,通过预处理和优化技巧提升了实际运行效率。
2025-09-13 16:43:48
577
原创 洛谷P3970 [TJOI2014] 上升子序列 题解
本文提出了一种计算整数序列中长度≥2的上升子序列数量的方法。首先使用动态规划,设dp[a[i]]表示以a[i]结尾的子序列个数,初始时间复杂度为O(n²)。通过离散化处理数据后,引入树状数组优化,将时间复杂度降为O(nlogn)。核心优化在于用树状数组维护前缀和,快速计算满足条件的子序列数。最终答案为所有长度≥2的子序列数之和减去单元素序列。代码实现了离散化、树状数组查询更新等关键步骤,从30分提升至满分效率。
2025-09-12 23:23:36
275
原创 洛谷P4344 [SHOI2015] 脑洞治疗仪 题解
本文提出了一种基于线段树的01序列维护方法,支持三种操作:区间置0、转移1填充0区间、查询最长连续0。通过维护总和、左右端及最大连续0等信息,结合懒标记处理区间覆盖,并设计特殊填充逻辑保证左优先原则。时间复杂度为O(nlogn+mlogn),相比二分法更高效。代码实现了完整的线段树结构,包括pushdown、pushup、查询和更新操作,成功解决了复杂区间操作问题。
2025-09-12 20:27:10
660
原创 洛谷P2572 [SCOI2010] 序列操作 题解
本文提出了一种基于线段树的算法,用于维护01序列并支持五种操作:区间置0、区间置1、区间翻转、查询1的数量以及查询最长连续1。算法通过设计包含8个信息的节点结构(包括总0/1数、左右连续0/1数等)和双标记系统(覆盖标记和翻转标记)来高效处理操作。实现时采用合并函数(hb)整合子节点信息,并优先处理覆盖标记。经测试,该算法能正确处理所有操作,时间复杂度为O(nlogn)。完整代码已通过在线评测系统验证。
2025-09-12 16:47:16
346
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅