自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 KMP总结

本文系统总结了KMP算法的核心内容:1)前缀函数(π数组)定义及线性计算方法;2)KMP字符串匹配的两种实现方式;3)周期与Border理论,包括最小周期计算和字符串压缩判定;4)前缀出现次数统计技术;5)动态维护本质不同子串数量的增量算法。全文以数学公式和代码实现相结合,涵盖了KMP算法的主要应用场景和优化技巧,关键结论包括π数组的单调性、失配跳转策略、最小周期公式(n-π[n])等,为字符串处理提供了系统性的解决方案。

2026-05-05 00:11:07 373

原创 字典树基础

摘要: 字典树(Trie)是一种树形数据结构,通过边表示字符,从根到节点的路径构成字符串。其核心应用是高效查询字符串是否存在,利用前缀优化时空复杂度。例题P2580通过构建名字字典树,使用cnt标记完整名字,vis记录点名状态。查询时沿树遍历,未找到返回"WRONG",首次点名标记为"OK",重复则返回"REPEAT"。代码使用动态节点分配(idx)和数组优化查询,时间复杂度接近O(L)(L为字符串长度)。

2026-04-14 09:27:21 350

原创 矩阵快速幂总结

矩阵快速幂是一种高效求解线性递推问题的算法。它通过将递推关系转化为矩阵乘法,并利用快速幂思想将时间复杂度从O(N)降为O(logN)。文章首先介绍了快速幂的基本原理,然后详细讲解了矩阵乘法的定义、性质和实现模板。重点阐述了如何将斐波那契数列等递推问题转化为矩阵形式,并给出了构造转移矩阵的通用方法,包括齐次递推、带常数项、含变量n和前缀和等常见类型。最后总结了矩阵快速幂的优势和构造步骤,强调其本质是利用矩阵表示线性变换,通过快速幂加速变换叠加。

2026-03-09 12:03:08 391

原创 单调队列优化DP核心总结

单调队列优化DP是一种高效处理特定动态规划问题的方法。它适用于转移方程可分离为最值形式且转移区间单调不减的情况,通过维护单调队列将复杂度从$O(N^2)$降至$O(N)$。核心操作包括去除过期决策点、维护队列单调性和获取最优解。典型应用包括切蛋糕、琪露诺等题目,相比线段树优化更适合处理滑动窗口最值问题。该方法要求决策区间单调且不含交叉项,能有效提升特定DP问题的求解效率。

2026-02-27 21:02:31 304

原创 线段树基础+离散化+线段树优化DP核心总结

本文总结了线段树结合离散化在DP优化中的应用。首先介绍线段树单点/区间操作的核心实现,时间复杂度均为O(logn)。其次讲解离散化技术,通过排序和去重将大值域映射为连续小范围下标。重点阐述线段树优化DP的三种类型:1D/1D DP通过权值线段树维护转移和;2D/1D DP使用多棵线段树分层维护状态;动态贡献DP则利用线段树维护变化贡献的最值。最后通过三个典型例题说明具体应用方法,包括严格上升子序列数量统计、定长子序列计数和分段最值问题。这种优化方法能将O(n²)的DP复杂度降至O(nlogn)或O(nklo

2026-02-26 20:25:43 289

原创 C++ 中的那些“疑难杂症”

C++编程中的常见陷阱与解决方案 本文总结了C++在算法竞赛和日常开发中的常见问题: 语法细节:整数溢出、浮点精度误差、数组越界等问题,建议使用更大数据类型、误差比较和容器替代裸数组 内存管理:野指针和内存泄漏问题,推荐使用智能指针和及时释放内存 STL使用:迭代器失效、map键不可修改、字符串拼接效率等,应注意容器特性和预留空间 编译问题:头文件重复包含和默认参数重复定义,建议使用头文件保护和分离声明定义 掌握这些问题的原理和解决方案,能有效提高代码质量和运行效率。

2026-02-13 15:30:18 663

原创 线段树总结

线段树是一种基于分治思想的二叉搜索树,用于高效处理区间查询和更新操作。它将区间递归划分为子区间,每个节点存储对应区间的信息(如和、最值等)。核心操作包括构建树(O(n))、区间查询(O(logn))、单点/区间更新(O(logn)),其中区间更新通过懒标记优化。适用于高频区间查询场景,如区间和、最值等,但实现较复杂且空间占用较大(4n)。相比暴力算法显著提升效率,但对静态数组可能不如前缀和或ST表简洁。使用时需注意数组大小、下标处理和懒标记传递等问题。

2026-02-13 14:31:29 1386

原创 寒假集训·子集枚举2

摘要:本文介绍了状压DP在几个编程竞赛题目中的应用。主要内容包括:1) P3052加强版使用一维DP数组优化空间;2) P5911变式题在类似框架下调整计算方式;3) AT_dp_u通过预处理子集相性和实现高效计算;4) P2167利用位掩码记录字符串匹配状态;5) P3694通过前缀和优化区间查询。这些案例展示了状压DP处理子集枚举问题的不同技巧,包括状态压缩、预处理和转移方程设计。

2026-02-12 21:25:25 727

原创 树形DP练习题

摘要 题目描述了一棵n个节点的树形结构,要求选择部分节点(满足贪婪值≥k)分发武器,使得每个节点都能被覆盖(被自身、父节点、祖父节点或子孙节点覆盖)。需要最小化选中节点的贪婪值总和,并在总和最小时最小化选中节点数。若无法覆盖所有节点,则输出-1及满足条件下的最小武器数。 解法采用树形DP,定义三种状态:dp[u][0]表示选中u节点,dp[u][1]表示u被某个子节点覆盖,dp[u][2]表示u需要父节点覆盖。通过DFS遍历树结构,合并子节点状态,最终得出最优解。时间复杂度为O(n),适用于大规模数据(n≤

2026-02-12 18:48:42 891

原创 状压DP之子集枚举总结

本文总结了状压DP中子集枚举的优化方法。暴力方案通过两层循环判断子集关系,时间复杂度高达O(4^n)。优化方案利用位运算(t-1)&s高效枚举子集,将复杂度降至O(3^n)。该方法通过减1和与运算确保结果始终是原状态的子集,并完整遍历所有子集。理论分析表明,该方案基于二进制位运算性质,能无遗漏地枚举所有子集,使n的适用范围扩大到15-16。核心代码仅需两重循环,大幅提升了算法效率。

2026-02-11 21:05:53 333

原创 florr构筑一览

《花瓣轮装备指南》摘要: 本文系统整理了各区域主流花瓣轮配装方案。花园推荐死亡之轮(轻+更快+刺果)和刺轮(刺+金叶);工厂以机械导弹和阴阳激光为主;蚂蚁地狱区提供玻璃轮、阴阳米等多样化选择;下水道侧重翅轮和灰尘轮;沙漠推荐蛋车、沙轮和碰撞流;海洋主打闪电轮和珊瑚轮;丛林金叶轮为顶级配置;冥界则以骰子轮和筹码轮为特色。各方案均标注了配装组合、天赋选择、获取难度、适用阶段、DPS表现及刷取区域,并特别标注了各区域必攒花瓣。其中阴阳切换、碰撞流等特殊玩法需要特别注意操作技巧。

2026-02-11 19:55:05 4296 6

原创 寒假集训 状压DP学习总结

本文总结了状压DP的核心知识点和应用方法。首先介绍了二进制表示和位运算技巧,包括集合操作的基本方法。然后阐述了状压DP的本质:将多维0/1状态压缩为整数进行状态转移,适用于旅行商、集合和棋盘类问题。通过P2622关灯问题的具体案例,展示了如何用二进制位表示灯的状态,结合BFS实现状态转移,求解最优解。最后强调状压DP的关键在于状态压缩和无后效性,对于转移顺序不定的问题可采用BFS或记忆化搜索。该技术特别适合处理小规模离散状态问题。

2026-02-10 21:30:38 270

原创 树的重心与树的同构 寒假集训知识点总结

本文总结了树的重心和树的同构两个重要知识点。树的重心部分介绍了三个等价定义及其证明,阐述了重心的关键性质(数量、移动规律、合并特性等)。树的同构部分详细讲解了有根树和无根树的同构判断方法,包括括号表示法和哈希法,重点分析了无根树通过重心转化为有根树的处理方案,以及换根DP计算所有节点哈希值的实现思路。文中提供了相关算法的代码实现框架,为树结构相关问题提供了系统的解决方案。

2026-02-09 21:35:54 957

原创 AT_tkppc3_d 巨大チェスボード 题解

摘要 本题解介绍了一个关于不规则国际象棋棋盘面积差的高效算法。给定H行W列的棋盘,每个格子的颜色遵循国际象棋模式,且行列尺寸不规则。需要处理Q次矩形区域查询,计算黑格与白格面积差。 核心思路是将二维求和分解为行列交替前缀和的乘积,通过预处理行和列的交替和数组sa与sb,使得每次查询能在O(1)时间内完成。算法总体复杂度为O(H+W+Q),适用于大规模数据。 样例验证表明该方法正确计算了面积差值,如查询(1,1)-(2,2)得到-140,(1,1)-(3,2)得到-115,与预期结果一致。提供的C++代码实现

2026-02-07 16:44:28 268

原创 寒假集训笔记·树上背包

本文系统讲解了树形背包问题的优化方法。首先分析了基础树形DP的$O(N^3)$解法及其常数优化思路。然后重点介绍了两种优化方法:1) 通过滚动数组和子树大小限制将复杂度降至$O(N^2)$,并给出了严格的数学证明;2) 当选择数量M较小时,进一步优化为$O(NM)$的解法。文章详细阐述了每种优化的状态定义、转移方程、实现代码和复杂度分析,特别强调了逆序枚举和枚举范围限制的关键作用。最后总结指出,应根据具体问题规模选择合适的优化策略,其中$O(N^2)$适用于中等规模数据,而$O(NM)$在M较小时更具优势。

2026-02-05 21:32:52 951

原创 寒假集训笔记·以边为对象的树形DP

本文总结了以边为研究对象的树形动态规划方法,主要介绍了三种经典模型:最小点覆盖、最大匹配和树的直径。通过状态定义和转移方程,将边约束转化为节点决策问题。文章还阐述了Kőnig定理、Gallai恒等式等图论理论,并对比了四大经典树上问题。最后列举了典型例题和应用场景,强调掌握这些模型和相关技巧对解决树形DP问题的重要性。该方法通过动态规划在树上进行状态转移,能有效处理与边相关的约束问题。

2026-02-05 14:30:43 797

原创 寒假集训笔记·以点为对象的树形DP

本文总结了以点为对象的树形动态规划(DP)的核心概念与经典题型。树形DP通过节点状态关联子树最优解,定义状态$f(u, state)$表示以$u$为根的子树在特定状态下的最优解。重点分析了三大经典问题:最大独立集、最小支配集和覆盖半径为2的支配集。最大独立集通过二元状态(选/不选)实现;最小支配集需三状态(自保/子保/父保)确保覆盖;覆盖半径2的问题扩展为五状态,考虑更复杂的覆盖来源。文章详细推导了各问题的状态转移方程,并对比了DP与贪心算法的适用场景,为树形DP问题提供了系统性的解题框架。

2026-02-05 14:27:45 1101

原创 题解:P14635 [NOIP2025] 糖果店 / candy(民间数据)

本文提出了一种贪心算法解决糖果店问题。通过分析糖果的两种购买组合(单颗和两颗组合),确定最优购买策略。算法首先筛选出性价比最高的两颗组合和单颗糖果,然后优先购买两颗组合,剩余钱购买单颗,并与仅购买单颗的方案比较取最大值。时间复杂度为O(n),空间复杂度O(1),适用于大规模数据。该方法通过数学计算避免了动态规划的高复杂度,确保在m极大时仍能高效求解。

2025-11-29 14:45:30 1638 1

原创 论生死的辩证关系与生命价值的永恒性

生死问题是哲学研究的核心命题,也是人类文明发展中永恒的思考对象。本文从生命科学、哲学思想、文化传统、文学艺术等多维度出发,探讨生的偶然性与死的必然性之间的辩证关系,分析不同文明对生死的认知差异,最终提出 "向死而生" 的生命态度 —— 即在承认死亡必然性的前提下,通过创造价值、传承记忆实现生命意义的超越。研究认为,生死并非对立的两极,而是自然法则支配下生命循环的有机组成部分,对生死的深刻认知能够引导个体更自觉地把握生命价值。

2025-07-24 22:28:38 1525

原创 动态规划DP(下)

本文系统介绍了动态规划算法在多重背包、博弈论、双序列和区间问题中的应用。针对多重背包问题,重点讲解了二进制优化方法将问题转化为01背包;博弈类问题通过状态转移分析必胜策略;双序列问题采用二维DP求解最长公共子序列;区间DP则用于计算最长回文子序列。各类问题均给出状态定义、转移方程和参考代码,并强调存储子问题解、避免重复计算的核心思想。文章涵盖了动态规划的多种典型应用场景,展示了该算法通过分解子问题、建立状态转移方程来高效解决复杂问题的通用框架。

2025-07-22 15:17:25 1196

原创 动态规划DP(上)

本文介绍了动态规划(DP)的基本概念及典型应用。核心思想是通过分解问题为相互重叠的子问题,利用记忆化存储避免重复计算。文章通过多个例题详细讲解: 一维DP:硬币找零问题,用最少硬币凑金额; 二维DP:网格路径计数问题,计算机器人从左上到右下的路径数; 线性DP:最长递增子序列问题,分别给出O(n²)和O(nlogn)解法; 划分型DP:字符串回文划分问题,求最少回文划分数; 背包问题:包括01背包和完全背包,说明状态定义和转移方程差异。 每种问题都提供代码实现,并强调状态定义、转移方程和边界处理等关键步骤,

2025-07-22 14:06:43 924

原创 详解十大排序(超万字,超详细)

本文详细的讲述了最常见的十种排序,包含原理、时空复杂度分析,动图演示,C++实例,非常适合新手小白进行学习,是一篇非常优秀的博客。

2025-07-21 11:51:49 1421

原创 C++二分详解

二分查找是一种高效的搜索算法,适用于有序数组。其核心思想是通过每次将搜索范围缩小一半来快速定位目标元素,时间复杂度为O(logn)。文章详细介绍了二分查找的基本原理、C++实现(包括迭代和递归版本)、标准库函数(binary_search、lower_bound等)以及常见变体应用(如查找边界值)。同时通过多个编程例题(搜索插入位置、寻找峰值等)展示了二分查找的实际应用场景和解题思路。文章还探讨了二分查找的局限性、浮点数二分和二分答案等进阶用法,帮助读者全面掌握这一重要算法。

2025-07-21 09:11:48 1059

原创 C++位运算

C++位运算总结:本文全面介绍了C++中的位运算操作,包括基础运算符(与、或、异或、取反、移位)及其应用场景。重点讲解了位操作技巧,如位访问与修改、掩码操作、变量交换、高效计算等,并提供了判断奇偶性、计算绝对值、汉明权重等实用算法。文章还指出了使用注意事项,如优先级、有符号数处理和可移植性问题,并通过示例代码演示了常见用法。位运算作为底层编程的重要工具,在性能优化和特定场景中具有显著优势。

2025-07-21 08:00:10 614

原创 STL小结

本文介绍了 STL(标准模板库)的基本概念、各类容器及相关算法。主要内容包括:1) 说明 STL 是存放数据的容器集合,比静态数组更灵活;2) 详细介绍 vector、stack、queue、string、pair、set、map 等容器的定义、特性、常用函数及注意事项;3) 列举排序、查找等常用算法及使用示例,提及 sort 函数可自定义排序规则;4) 总结 STL 遵循泛型编程思想,是 C++ 标准库核心组件,也是解题利器。文章通过具体定义和函数说明,帮助理解 STL 的实际应用,适合初学者学习。

2025-07-20 23:14:04 767

原创 树与二叉树+堆(免费详细)

本文介绍了树与二叉树的基本概念、存储结构及遍历方法。主要内容包括:1)通过图示展示满二叉树、普通二叉树、完全二叉树等不同树形结构;2)讲解用结构体存储树和二叉树的实现方式;3)详细说明先序(根左右)、中序(左根右)、后序(左右根)三种遍历方法;4)提供二叉树遍历的例题及参考代码;5)介绍堆的概念及其在优先队列中的应用,包含STL实现方法。文章通过具体代码示例帮助理解树结构的实际应用,适合初学者学习树的基本操作。

2025-07-20 11:31:24 783

原创 题解:P13101 致谢 | FJCPC2025全体参赛选手&赛事

摘要:本文介绍了一个处理FJCPC历年主办院校信息的C++程序。程序使用常量字符串数组存储11届比赛的院校缩写,数组索引0对应第1届。核心逻辑是直接通过输入届数n输出schools[n-1],时间复杂度O(1)。程序采用string类型确保安全性,并假设输入范围1-11有效。实现简洁高效,若需扩展只需增加数组元素即可。这种固定数据量的实现方式是该问题的最优解。

2025-07-19 17:25:04 255

原创 题解:P13095 炒股高手

本文提出了一种基于价格对数差分的区间交易策略优化方法。通过预处理价格序列,计算相邻日期的正价格差并构建前缀和数组,实现O(1)时间复杂度的区间收益查询。算法首先将价格转换为对数形式,然后识别所有可盈利的相邻交易机会(a_j < a_{j+1}),累加这些差值得到区间总收益。最终收益为初始资金e^k乘以各次交易收益的乘积(转换为对数相加)。该方法通过差分数组和前缀和优化,预处理时间O(n),查询时间O(m),总复杂度O(n+m),适用于大规模数据处理。

2025-07-19 17:22:05 154

原创 题解:P13080 [NOISG 2017] Best Places / 最佳选址

摘要:本文分析了NOISG2017竞赛中的"最佳选址"问题,要求找到使所有给定点曼哈顿距离之和最小的位置。解题关键在于利用X、Y坐标独立性和中位数性质,通过分别排序求中位数来求解。C++实现中先读取数据,对坐标排序后取中位数位置作为结果(偶数时取前一个中位数)。算法时间复杂度为O(NlogN),空间复杂度O(N)。该解法通过降维处理简化了二维曼哈顿距离最小化问题。

2025-07-19 17:15:41 339

原创 题解:P13059 [GCJ 2020 #1C] Overexcited Fan

该题目要求判断粉丝在移动过程中是否存在某个时刻t,使得从原点(0,0)到其当前位置的曼哈顿距离不超过t。解题思路是逐时刻模拟粉丝移动,每步更新坐标后检查距离条件。若满足则立即返回当前t值,否则最终输出"IMPOSSIBLE"。算法时间复杂度为O(L)(L为移动序列长度),空间复杂度O(1)。代码实现通过实时追踪坐标变化,使用曼哈顿距离公式和边界处理完成判断。

2025-07-19 17:08:23 346

原创 题解:P13049 [GCJ 2020 Qualification] Nesting Depth

摘要:本文针对Google Code Jam 2020资格赛中的Nesting Depth问题,提出了一种基于贪心算法的高效解决方案。给定数字字符串S,需插入最少数量的括号使其满足4个条件:括号匹配、移除后还原、数字d位于d层嵌套、结果最短。算法通过比较相邻数字差值动态插入括号:差值正数插入'(',负数插入')',相同不操作。C++实现采用单次遍历处理数字并维护当前深度,时间复杂度O(n),空间复杂度O(n)。关键点包括深度初始化、差值处理和末尾未闭合括号补全。

2025-07-19 16:57:44 270

原创 题解:P12984 [GCJ 2022 #1A] Double or One Thing

本题要求我们通过选择性地重复字符串中的字符(高亮操作),生成所有可能的字符串变体,并找出其中字典序最小的一个。关键在于如何高效地确定每个字符是否需要被重复才能使最终结果字典序最小。

2025-07-19 16:39:40 278

原创 前缀和与差分(免费)(一维+二维,超详细)

本文介绍了前缀和与差分两种数据处理技术。一维前缀和通过预处理数组实现O(1)区间查询,适用于高频求和场景;一维差分通过维护差分数组实现O(1)区间修改,适合批量更新。二维前缀和扩展至矩阵,可快速计算子区域和;二维差分则支持高效子矩阵修改。文章详细阐述了各技术的核心原理、实现步骤、应用场景和注意事项,并提供了完整代码示例。前缀和与差分互为逆运算,常结合使用以优化区间查询和修改操作,是处理线性与二维数据的高效工具,特别适合需要频繁区间操作的大规模数据处理。

2025-07-19 16:19:25 1383 2

C++小游戏代码.rar

没有。。。。

2025-07-21

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除