自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 如何用 bool 类型写出 A+B Problem

本文介绍了如何模拟计算机底层二进制运算来解决A+B问题。首先解释了二进制原码、反码和补码的概念,说明补码用于处理负数加法运算。接着介绍了与、或、异或和取反等基本逻辑门运算。然后详细描述了如何通过逻辑门组合实现二进制加法运算,包括处理进位的方法。最后给出了C++实现代码,展示了如何将十进制数转换为二进制补码形式进行加法运算,再转换回十进制输出结果。文章为理解计算机底层运算原理提供了实用示例。

2026-05-12 15:42:19 371

原创 平衡树学习笔记

本文介绍了线段树和平衡树的基本原理与应用。线段树本质是基于排序的二分结构,通过不同排序对象实现不同功能。二叉查找树(BST)通过中序遍历实现有序存储,但可能退化为链式结构。平衡树(Treap)通过随机旋转优化BST的高度,保证操作效率。文章详细讲解了旋转规则(左旋/右旋)和平衡树的插入、删除、查询排名等核心操作,并以洛谷例题说明具体实现方法。平衡树结合了BST的排序特性和随机旋转策略,有效解决了普通BST可能退化为链表的问题,确保操作时间复杂度维持在O(log n)级别。

2026-04-17 16:41:58 435

原创 CSP-S 模拟赛十二总结

本文总结了两道编程竞赛题的解题思路。第一题是二分答案类问题,通过贪心算法验证分组可行性,时间复杂度为O(n log n)。作者提供了两种实现方法,并建议参考更严谨的题解。第二题针对不同k值分类讨论:k=0-2时直接输出"YES",k=4时需所有建筑高度相同。重点分析了k=3的情况,提出通过记忆化搜索判断能否用L型填充整个网格,并讨论了剪枝优化方案。两道题都展示了如何将问题分解为可验证的子问题,并通过算法优化提高效率。

2026-03-16 12:12:12 351

原创 2-SAT 详解

2-SAT问题是一种特殊的布尔可满足性问题,研究在n个布尔变量和m个形如(a∨b)的约束条件下是否存在可行解。该问题通过图论方法解决:将每个变量及其否定形式视为节点,根据约束条件建立有向边。若变量x与其否定¬x位于同一强连通分量中,则问题无解;否则可通过比较强连通分量的拓扑序来构造解,选择拓扑序较大的命题为真。文章详细介绍了建图方法、无解判断条件以及解的构造过程,并提供了相关证明和代码实现。

2026-03-04 17:54:50 395

原创 狄利克雷卷积与反演(初学)

摘要 本文系统介绍了反演理论及其应用。首先定义了反演的基本概念,即通过已知映射关系寻找其逆映射的过程。重点讲解了两类反演方法:二项式反演和莫比乌斯反演。二项式反演部分阐述了两种形式及其在错排问题中的应用,揭示了反演与容斥原理的联系。莫比乌斯反演部分引入狄利克雷卷积和莫比乌斯函数,证明了关键公式μ*I=ε,并推导出反演公式。全文通过矩阵理论、组合数学和数论工具,展示了反演方法在解决复杂数学问题中的强大威力。

2026-02-12 23:19:58 686

原创 DP 优化三:决策单调性与四边形不等式优化 DP

本文介绍了决策单调性和四边形不等式在动态规划优化中的应用。决策单调性指最优决策点随状态单调不递降的性质,可用于优化DP转移。通过双端队列维护最优决策区间,采用二分查找分割点的方法实现高效转移。四边形不等式作为判断决策单调性的工具,其"交叉小于包含"的性质保证了DP满足决策单调性。文章还阐述了四边形不等式对二维区间DP的优化作用,指出最优决策点满足p[i][j-1]≤p[i][j]≤p[i+1][j]的单调性质。这些方法能显著提升动态规划问题的求解效率。

2026-02-09 20:33:53 743

原创 DP 优化二:斜率优化 DP

本文介绍了任务安排问题的动态规划解法及其优化方法。首先通过P2365任务安排问题展示了基础$O(n^2)$DP解法,采用费用预先处理思想将状态转移优化为单维。随后针对P10979任务安排2的$n≤3×10^5$数据规模,引入斜率优化DP技术。该方法将转移方程转化为一次函数形式,通过维护下凸包来快速确定最优决策点。文章详细分析了点与斜率的关系,证明了上凸包中的中间点不会成为最优解,从而提出使用队列维护下凸包的有效算法。这种优化方法将时间复杂度降为$O(n)$,适用于大规模数据情况。

2026-01-21 17:30:57 938

原创 DP 优化一:单调队列优化 DP

本文介绍了动态规划中的单调队列优化方法。首先解释了单调队列的概念及其在线性时间内求区间最值的优势,通过滑动窗口例题展示了具体实现过程。然后重点讲解了如何利用单调队列优化特定形式的DP转移方程,即形如f[i]=min{f[j]+F(j)+C}的情况。最后以一道粉刷围栏的题目为例,展示了如何将暴力DP解法转化为单调队列优化形式,通过数学变形将转移方程改写为可优化结构,从而显著提升算法效率。文章通过具体例题和代码示例,系统性地阐述了单调队列优化的原理和应用场景。

2026-01-15 20:31:46 657

原创 微积分初步

本文介绍了微积分中的微分与积分概念。微分通过微元法求切线斜率与自变量的关系,详细讲解了微分与求导的区别及基本求导法则。积分作为微分的逆运算,分为定积分和不定积分,重点阐述了不定积分的定义、性质及分步积分法则,并解释了积分常数C的来源。文章通过图像和实例说明了微分求速度变化和积分求位移的应用,帮助理解微积分的基本原理和运算方法。

2026-01-05 20:52:46 988

原创 AtCoder Beginner Contest 439 A~F 题解

本文包含6道编程题的题解: A题:计算2^n-2n,直接输出结果即可 B题:判断快乐数,使用哈希表检测循环 C题:统计1-n范围内恰好能表示为x²+y²的数 D题:统计满足7:5:3比例的三元组出现次数 E题:风筝问题,转化为最长上升子序列问题 F题:美丽序列问题,寻找峰谷交替模式 所有题目都给出了详细的分析思路和对应的代码实现,涵盖了数学计算、哈希表、枚举统计、动态规划等多种算法技巧。其中E题使用了线段树优化LIS计算,F题需要寻找特定的峰谷模式。

2026-01-04 19:07:34 651

原创 一篇文章带你领略欧拉公式的美上:自然常数 e

本文从欧拉公式出发,深入探讨了自然常数e的数学本质。作者通过复利计算、泰勒展开等不同角度阐释e的定义,并创新性地将等比数列求和公式推广到矩阵运算领域。文章展示了如何用抽象思维理解数学概念,包括将积分视为操作符的独特视角。通过几何图示验证了向量旋转操作的收敛性,揭示了e^x在积分运算中的自洽特性。这种从具体到抽象的思维过渡,为后续探讨虚数单位i与欧拉公式的深层联系奠定了基础。

2025-11-20 20:50:07 1304

原创 CSP-S 模拟赛十一总结

算法题解摘要 T1:简单枚举题 通过枚举起点并计算能延伸的最远位置来求解,时间复杂度低,代码简单。 T2:优化DP问题 将约束条件转化为最长子序列问题,使用动态规划解决。通过二进制特性优化,将时间复杂度从O(n²)降为O(256n)。 T3:图论与置换环 通过构建置换图并分析环的性质,证明最小交换次数等于总点数减环数。通过错位排列最大化环长来优化解法。 T4:动态规划优化 定义二维状态DP,使用滑动窗口优化转移过程,将时间复杂度从O(nk²)降为O(nk)。 各题均提供了详尽的解题思路和优化方法,涵盖枚举、

2025-11-19 19:56:41 591

原创 线段树的时间和空间优化

本文介绍了优化线段树实现的多种方法,主要包括: I/O优化 - 使用scanf/printf替代cin/cout、关闭流同步、实现快读快输、使用fread/fwrite高级优化 递归改递推 - 减少递归调用的性能开销 离散化 - 将大值域映射到小范围内,降低空间和时间复杂度 结构体优化 - 使用结构体代替单独数组,提高CPU缓存命中率 C++函数特性 - 利用inline、const等关键字进行编译器优化 这些优化技巧可以有效提升线段树的执行效率,特别是在处理大规模数据时效果显著。文章还提供了相关优化的具体

2025-11-17 20:58:19 1028

原创 CSP-S 模拟赛十总结

本文包含三道编程题的解法分析: T1:给定数组求前k大子段和。通过将问题转化为前缀和与后缀和的组合,使用优先队列优化,时间复杂度为O(k log n)。 T2:树形DP问题,要求计算满足相邻节点数值差≥k的染色方案数。利用DP对称性质优化,将特殊处理部分限制在O(nk)范围内,时间复杂度O(n²k)。需注意k=0的特殊情况。 T3:题目内容未完整展示,但从代码可见涉及组合数学和模数运算,使用了预处理阶乘和逆元来优化计算。 三题均通过巧妙转化问题模型和利用数据结构/数学性质来优化时间复杂度,展现了典型的算法竞

2025-11-12 14:13:49 591

原创 MX 模拟赛九总结

本文总结了四道编程题目及解题思路:T1通过排序和双指针求最短距离;T2采用动态规划计算区间不对称值;T3运用组合数学分析圆上三角形数量;T4优化贪心策略求字符串中最多"bessie"数量。每道题都给出了关键思路和代码实现,涉及算法设计、数学推导和优化方法。

2025-11-12 11:02:30 723

原创 模拟赛(我也不知道第几场)总结

本文包含三道算法题解: LCS优化问题:利用贪心性优化LCS计算,通过预处理或二分查找实现O(m²)或O(m²logm)时间复杂度解法,适用于B串较短的情况。 最小环计数问题:采用BFS找最小环长度,通过分割思想统计环数,处理奇偶环差异,最终时间复杂度为O(n²)。 组合数学问题:将除法条件转化为线性方程,转化为背包问题求解,使用动态规划统计满足条件的方案数,模数为998244353。 三题均通过数学转化和算法优化解决原问题,展现了对动态规划、图论和组合数学的灵活运用。

2025-11-06 11:09:10 817

原创 线段树详解

本文介绍了线段树的基本概念和操作。首先通过二分查找思想引出线段树的单点查询功能,然后扩展到单点修改。重点讲解了区间查询和区间修改的实现方法:区间查询采用分治思想递归处理覆盖区间,区间修改引入懒标记(lazy tag)来提高效率。文中提供了详细的代码实现,包括查询、更新、pushdown和pushup等核心函数,并总结了线段树的三种经典应用模型:单点修改区间查询、区间修改单点查询、区间修改区间查询。线段树通过分治策略和懒标记技术,将操作时间复杂度优化到O(log n)。

2025-10-29 20:28:41 967

原创 CSP-S模拟赛八总结

该题要求统计在0到n范围内满足以下条件的数字x的个数: x是完全平方数 x的每一位数字都是偶数 解题思路是枚举所有可能的平方根i(i为偶数),计算i²并检查其各位数字是否全为偶数。时间复杂度为O(√n*位数),由于常数小,可以高效解决问题。代码实现中通过循环检查每个候选数的数字位,最终输出符合条件的数字个数。

2025-10-27 21:06:56 738

原创 CSP-S模拟赛七总结

这是一篇关于算法竞赛解题记录的文章摘要。文章记录了作者在比赛中被坑惨的经历,包含三道题目的详细解析: T1是一道组合计数题,通过统计比当前数小的数量并运用组合数学知识解决,给出了模数998244353下的计算代码。 T2考察数学思维,处理10^100-1个点间的路径问题。通过分析互质与非互质情况,提出了多种中转点策略(如最小质因数、2等),并给出了相应的数学证明和优化代码。 T3是道高难度题目,通过贡献分析推导出复杂公式,需要处理最大值和区间条件,最终拆分为多个可维护的前缀和项。 文章展示了作者在算法竞赛中

2025-10-26 20:48:22 765

原创 CSP-S模拟赛六总结

这篇文章主要讲解了三个算法题的解题思路: T1问题:通过前缀和与预处理技术,找到区间最大差值。方法是对每个位置i,计算s[i]与前缀最小值或后缀最大值的差。 T2问题:使用动态规划预处理每个格子能到达的步数,通过DFS遍历更新各点的合法终点数,最后统计满足条件的路径总数。 T3问题:根据n的奇偶性分类讨论,当n为偶数时分解为小正方形组合问题,奇数时转化为线性DP问题,处理不同尺寸矩阵的组合方式。 三题均通过数学分析和动态规划优化,将问题转化为可高效求解的形式。

2025-10-24 20:38:32 1282

原创 CSP-S模拟赛五总结(实际难度远低于提高组)

本文包含两题解: T1:最短路径问题,使用Dijkstra算法计算从起点到终点的最短路径。若路径长度≤K,直接输出所有点对;否则通过排序和二分计算满足条件的点对数。 T2:后缀表达式求值问题,用栈构建表达式树后处理反转情况。分情况讨论逻辑运算中的"与"和"或"操作,递归计算需要反转的最小节点数。 两题均涉及图论算法(Dijkstra)和数据结构(栈、树)的应用,重点考察最短路径计算和逻辑表达式处理能力。

2025-10-14 19:47:37 1008

原创 Codeforces1058(Div.2) A至F题解

本文摘要:作者分享了四道编程竞赛题的解题思路和代码实现。A题通过排序去重找到最小MEX值;B题通过分析数组构造规律推导出原数组;C题通过二进制对称性判断数是否符合条件;D题则通过互动查询和逻辑推理确定数组元素。每道题都提供了清晰的解题思路和简洁的代码实现,展示了算法竞赛中的典型解题方法。

2025-10-13 20:26:35 1017

原创 MX模拟赛四总结

这篇文章分享了四道编程题的解题思路和代码实现。第一题通过数学推导发现答案可直接计算为n²;第二题采用二进制枚举和贪心策略处理模数问题;第三题利用前缀和与模运算性质实现贪心解法;第四题通过动态规划统计满足条件的子串数量,并使用差分优化答案计算。整体展示了数学思维、枚举技巧和动态规划在不同题型中的应用。

2025-10-11 15:11:24 817

原创 MX 模拟赛三总结

这篇博客记录了作者在解决四个编程题目过程中的思考和解题过程。T1通过前缀和优化处理字符串变换问题;T2使用二分法求解最小化最大运动时间;T3在理解题意后通过枚举边和Tarjan算法处理图论问题;T4则通过排序和边界处理优化矩形区域判断。文章展现了作者逐步解决问题的思路,包含代码实现和关键优化技巧的说明。

2025-10-08 20:45:49 1122

原创 一篇文章带你走进类的世界(上)——类与对象

本文简要介绍了C++中类的核心概念,包括面向对象编程的四大特点(抽象、封装、继承、多态)和类的具体使用。重点讲解了类的成员类型(公有、私有、保护)、成员函数定义方式、构造函数(普通/复制/移动)和析构函数的作用,以及前向引用声明的应用场景。文章通过代码示例帮助理解类的基本语法和特性,为后续深入讲解继承和多态等高级特性打下基础。

2025-09-13 23:42:55 845

原创 MX 模拟赛二总结

这篇文章分享了5道算法题的解题思路和代码实现。T1是一道简单的水题;T2通过限制条件简化了单词搜索问题;T3通过循环和取模处理字符串问题;T4从暴力搜索优化到动态规划;T5则利用容斥原理和并查集解决集合划分问题。文章详细讲解了每道题的思考过程、算法选择以及代码实现的关键点。

2025-09-13 23:22:25 855

原创 MX模拟赛总结

本文摘要: T1讨论四舍五入题目中的编号规则问题,指出题目描述不清导致50分丢失,强调需注意输出格式细节。 T2提出两种解法:暴力DP(时间复杂度高)和优化后的三维DP(g[i][j]和f[i][j]记录最大值),并提及线段树优化思路。 T3通过二分将问题转化为判定性问题,利用双指针统计满足条件的数对,实现O(nlogn)的复杂度。 T4利用特殊数据范围(0≤a_i≤2),通过分析奇偶性特点,设计判断连通块点权和为k的有效方法。 四道题目均聚焦算法优化与特殊情况的处理,展示了不同解题思路和技巧。

2025-09-13 22:24:56 1033

原创 CSP-S初赛模拟赛错误点与未知知识

主要用于计算 RMQ(Range Maximum/Minimum Query,区间最大 / 小值)类的问题,时间复杂度与空间复杂度均为。由于哈夫曼编码的特殊构造方式,我们可以得到一条性质:哈夫曼编码里不会出现一个编码是另一个编码的前缀的情况。FIFO(First In First Out)是一种先进先出的数据结构,常见的如队列。FILO(First In Last Out)是一种先进后出的数据结构,常见的如栈。初赛也快到了,最近做了几套模拟题,现在来整理一下下。森林,即若干棵树组成的集合,性质如这道题。

2025-09-09 17:32:32 681

原创 AtCoder Beginner Contest 420 A至G 题解

本文摘要: 该文章记录了5道编程题的解题思路和代码实现。A题通过取模运算确定月份;B题模拟投票过程计算得分;C题通过预处理优化查询操作;D题使用BFS解决迷宫问题,考虑状态转换;E题利用并查集高效处理连通性查询。每道题都给出了清晰的解题方法和完整的代码实现,涵盖了模拟、预处理、广度优先搜索和并查集等算法思想。

2025-08-25 20:47:02 1370

原创 DP大家族——关于DP的梳理

本文总结了动态规划(DP)的基本概念和实现方法,包括一维和二维DP的应用。DP的核心思想是利用已知状态推导新状态,主要实现方式为递推和递归(记忆化搜索)。文章通过斐波那契数列、最大连续子序列和(一维DP)、最长上升子序列(LIS)及其优化方法,以及二维DP中的“马拦过河卒”问题等经典例题,详细讲解了DP的解题思路和优化技巧。此外,还介绍了空间优化方法如滚动数组,并展示了不同场景下DP的具体应用,帮助读者逐步掌握动态规划的基础知识和解题策略。

2025-08-25 19:44:28 1208

原创 Codeforces1043 A至F 题解

【摘要】 作者记录了一场编程比赛的解题过程:22:13登录Codeforces后,22:15在洛谷看到"今日忌睡觉"的提示。比赛开始后,22:35-22:41快速AC了A题(字符串拼接水题),22:42-22:46用数学方法解决了B题(因数分解)。23:02通过三进制分解AC了C1题,23:22在C2题中优化了C1的解法,利用西瓜购买次数的数学关系降低金币消耗。23:33开始研究D题,通过推导数字位数的数学公式(涉及等比数列求和)寻求O(t)解法,最终得出抽象但高效的计算方法。整个过程展

2025-08-22 23:58:30 868

原创 Manacher(马拉车算法)详解

马拉车算法(Manacher Algorithm)是一种在O(n)时间复杂度内求解最长回文子串的高效算法。它通过在字符间插入特殊符号(如#)统一处理奇偶长度回文串。算法的核心思想是利用回文串的对称性,通过已知信息优化计算:维护当前最右回文串的中心c和半径r[c],对于新位置i,根据其对称点j的信息快速确定初始半径,再暴力扩展。相比传统O(n^2)方法大幅提升了效率。该算法代码简洁,只需一次遍历即可找到最长回文子串。

2025-08-21 19:37:30 901

原创 ABC402 D题题解

本文提出了一种计算圆上割线交点数量的数学方法。通过分析平行割线的性质,证明了当两条割线与圆的交点编号之和对n取模相等时,这两条割线平行。基于此结论,文章给出了一个高效的算法:先统计每组平行割线的数量,再利用组合数学公式计算非平行割线的对数。该方法将问题转化为简单的模数统计和前缀和计算,时间复杂度为O(n)。代码实现简洁明了,适用于大规模数据计算。

2025-08-21 17:40:17 1041

原创 CSP-S模拟赛四总结

本文摘要了两道编程竞赛题目及其解法。T1题要求处理内存限制条件下的排序问题,强调不能使用数组排序的直接方法。T2题探讨了动态规划优化策略,通过状态转移方程和前缀和优化,将DFS暴力解法提升为高效DP解法,最终使用滚动数组和前缀和优化实现O(n^3)复杂度。T3题则通过将数字分类为0/1/2三组,并构建三棵线段树来处理区间排序和查询问题,实现了高效的区间修改和单点查询。三道题目分别考察了内存优化、动态规划优化和数据结构应用能力。

2025-08-19 20:11:51 915

原创 CSP-S模拟赛三(仍然是难度远超CSP-S)

这是一篇关于算法竞赛中两道难题的解题记录。第一题T1使用并查集优化区间最值查询,通过按身高排序合并相邻区间来避免MLE问题。第二题T2是一道复杂的线段树应用题,需要维护奇偶性相同的区间并处理郁闷值计算,涉及贪心策略和数据结构操作。作者在解题过程中遇到了空间限制和算法实现上的困难,最终爆零,但详细记录了思考过程和部分代码实现。

2025-07-17 20:36:21 567

原创 字典树(Trie 树)详解

本文介绍了Trie树的基本概念和应用。Trie树是一种用于处理字符串前缀问题的树形结构,通过将字符串的字符作为边来构建树,每个字符串的末尾节点会被标记。文章通过图示和代码展示了Trie的构建过程,并对比了暴力解法与Trie解法在查询问题上的效率差异,说明Trie能有效降低时间复杂度。最后预告下一篇文章将讲解AC自动机。

2025-07-16 19:33:13 1114

原创 KMP 详解

KMP算法详解:一种高效的字符串匹配技术 KMP算法由Knuth、Pratt和Morris三位科学家提出,解决了传统暴力字符串匹配效率低下的问题。该算法通过分析模式字符串的最长公共前后缀,避免不必要的比较操作,将时间复杂度从O(nm)优化到O(n+m)。核心在于构建next数组,记录模式字符串的匹配失败时应该回溯的位置。文章详细讲解了暴力枚举法的缺陷、KMP算法的思想精髓、next数组的构建过程以及完整的KMP实现代码,并附有图解说明。该算法思想深刻,代码简洁优美,是字符串处理领域的重要突破。

2025-07-15 08:24:21 960

原创 CSP-S模拟赛二总结(实际难度大于CSP-S)

本文介绍了两个编程问题的解法。第一题采用状压DP优化最大团问题,通过预处理和固定基准点将复杂度从O(2^nn^2)降至O(2^nn),并进一步优化到可行范围。第二题针对不同子任务提供分层解法,包括直接计算、双指针和二分法,最终通过枚举差值(x-y)并利用单调性进行二分查找,解决了高次方程求解问题。文章强调了预处理和边界条件处理的重要性,特别是在处理大数运算时的细节控制。

2025-07-08 18:41:52 1317

原创 高斯消元法详解

高斯消元法是一种用于求解线性方程组的经典算法,通过矩阵变换将系数矩阵转化为上三角结构,最终实现方程求解。该算法不仅能解线性方程组,还可用于行列式计算和矩阵求逆。文章详细介绍了高斯消元的基本步骤,包括行变换、主元选取和回代过程,并分析了特殊情况(如主元为0)的处理方法。作者还提出了一种改进算法,通过全列消元和随机主元选择简化计算过程。时间复杂度均为O(n³),适用于计算机求解多元一次方程组。文末附有代码实现,展示了高斯消元在编程中的应用。

2025-07-04 21:16:21 1437

原创 CF1034赛后总结

本文总结了5道编程竞赛题目的解题思路与代码实现: A题:配对问题,发现每堆数量为4的倍数时Bob获胜,否则Alice胜,直接判断n能否被4整除即可。 B题:k>1时所有玩家都可能存活;k=1时只有最大值能存活,简单判断即可。 C题:通过比较每个元素与前缀最小值、后缀最大值的关系,判断该元素能否存活。注意初始化问题。 D题:爱丽丝的最优策略分析,当1的数量≤k时直接获胜,否则根据特定条件判断胜负。 E题:逆向思维,通过确定MEX值来反推满足条件的k范围,利用差分数组统计结果。 这些题目主要考察了数学思维

2025-07-02 20:53:21 969

空空如也

空空如也

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

TA关注的人

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