- 博客(60)
- 收藏
- 关注
原创 从0到1:Linux系统编程 --- 基础 IO(1)
本文介绍了Linux系统编程中基础IO的相关知识。文章首先阐述了文件的基本概念,指出文件由内容和属性(元数据)组成,即使空文件也会占用磁盘空间。接着讲解了文件访问机制,强调路径查找和进程工作路径的重要性,并指出文件操作本质是进程通过CPU访问内存中的文件。文章将文件分为内存中的打开文件和磁盘文件两类,并说明操作系统通过"先描述后组织"的方式管理打开文件。最后回顾了C语言文件操作接口,包括w和a两种打开模式的区别。这些基础概念为深入理解Linux文件系统奠定了基础。
2025-12-21 10:22:36
660
原创 高阶数据结构 --- 单调队列
本文介绍了算法竞赛中常用的单调队列数据结构。通过两个典型例题展示了单调队列的应用:1)滑动窗口问题,分别实现求窗口内最小值和最大值的单调队列解法;2)质量检测问题,使用单调队列求固定窗口最小值。代码示例展示了如何使用双端队列维护单调性,并通过控制队列长度实现滑动窗口功能。单调队列能有效优化滑动窗口类问题的求解效率,是算法竞赛中的重要技巧。
2025-11-23 23:32:04
351
原创 高阶数据结构 --- 单调栈
本文介绍了算法竞赛中常用的单调栈数据结构。内容涵盖单调栈的基本概念(包括单调递增栈和单调递减栈)、主要作用以及相关算法题示例。通过三个典型题目(单调栈模板题、发射站问题、柱状图最大矩形面积问题)展示了单调栈的实际应用。文章以简明扼要的方式呈现了单调栈的核心知识点和应用场景。
2025-11-23 23:25:20
266
原创 高阶数据结构 --- 树状数组
本文介绍了树状数组(Binary Indexed Tree)的基本原理和实现模板。主要内容包括:树状数组的引入、维护信息方式和重要性质;一维树状数组的三种操作模板(单点修改+区间查询、区间修改+单点查询、区间修改+区间查询);以及二维树状数组的三种对应操作模板。每个模板都给出了完整的C++实现代码,包含lowbit操作、修改和查询函数等核心部分,适用于不同场景的高效区间操作需求。
2025-11-18 13:03:19
452
原创 ST 表相关练习题
本文介绍了三道ST表相关的练习题,难度递增。第一题"忠诚"是ST表模板题,用于区间最小值查询。第二题"最大数"提供了线段树和逆向ST表两种解法,重点讲解了动态更新ST表的技巧。第三题"01序列"考察最长子序列查询,结合了前缀和与ST表的应用,详细分析了三种可能情况及对应的处理方法。每道题都给出了完整的代码实现和解题思路,适合检验ST表的学习成果。文章结尾提供了相关学习资料链接,鼓励读者继续深入学习。
2025-11-17 22:37:59
1221
原创 Linux 初识:Linux 环境和历史
本文介绍了Linux操作系统的基本知识,包括计算机和操作系统发展历史,重点讲解Linux作为开源系统的特性。通过四个问题探讨了开源的优缺点,如免费代码但软件不一定免费,分析了开源与闭源在效率、稳定性和安全性上的差异。文章还涉及Linux版本分类、应用场景、环境安装等基础内容,强调了Linux在企业级应用中的优势:高效、稳定、安全且免费。最后指出Linux将作为未来程序服务端平台的重要地位,为后续学习奠定基础。
2025-11-17 09:53:52
335
原创 C语言常见概念
本文介绍了C语言的基本概念,包括C语言的定义、历史背景和编译过程。详细讲解了VS2022编译器的选择与使用方法,并通过"Hello World"示例演示了首个C语言程序。同时涵盖了C语言的关键字、字符与ASCII编码、字符串与转义字符等基础内容。文章还分类讲解了C语言的语句类型和注释方法,包括单行注释与多行注释的使用规范及注意事项。最后通过练习题帮助读者检验学习成果,为后续深入学习C语言打下基础。
2025-11-11 15:35:30
880
原创 排序算法(1)--- 插入排序
本文介绍了两种插入排序算法:直接插入排序和希尔排序。直接插入排序通过逐个将元素插入已排序序列实现排序,时间复杂度为O(n²),适用于接近有序的数据。希尔排序则是对其优化,通过分组预排序逐步缩小间隔,最终进行一次直接插入排序,提高整体效率。文章通过实例和代码演示了算法实现,并分析了时间复杂度等特性,帮助读者理解插入排序的基本原理和应用场景。
2025-10-19 15:36:59
746
原创 高阶数据结构 --- Trie 树
本文介绍了Trie树(字典树),这是一种高效处理字符串插入和查询的数据结构。文章详细讲解了字典树的概念、构建过程、优势(相比哈希表和红黑树),以及如何通过pass和end变量优化查询功能。同时给出了C++实现示例,包括插入字符串、查询字符串出现次数和前缀数量等功能。建议读者通过模拟练习深入理解字典树的原理和实现。
2025-10-16 17:43:46
1092
1
原创 从0到1:Linux 系统编程 --- 冯·诺依曼体系结构
本文介绍了冯·诺依曼体系结构的基本原理及其在计算机系统中的核心作用。该体系结构将计算机硬件分为输入单元、输出单元、存储单元、运算器和控制器五个部分,并规定所有设备只能直接与内存交互。文章重点阐述了内存作为存储器的价值:通过内存作为CPU与外设之间的缓冲层,大幅提升了计算机整体效率。同时解释了为何程序运行时必须加载到内存,并通过QQ消息传输的实例展示了数据在冯诺依曼体系中的流动过程。最后指出这一体系结构的技术创新推动了计算机的普及和社会进步。
2025-10-12 18:14:00
924
原创 版本控制器 git(3)--- git 分支管理
本文介绍了Git分支管理的基本操作。主要内容包括:1)分支概念解析,通过平行宇宙类比说明分支作用;2)分支创建、切换和合并操作(git branch/checkout/merge);3)分支删除(git branch -d);4)冲突解决方案;5)fast-forward合并模式。文章强调Git鼓励使用分支开发再合并的策略,既安全又高效。通过实例演示了分支管理的完整流程,为团队协作开发提供了实用指南。
2025-10-10 22:03:38
891
原创 版本控制器 git(5)--- git 标签管理
本文介绍了Git标签管理的基本概念和操作。标签是为重要commit创建的可记忆别名(如v1.0),便于版本回溯。创建标签使用git tag [name]命令,可查看所有标签或为特定commit打标签。支持带说明的标签(-a命名,-m说明),通过git show查看详情。操作包括:删除本地标签(git tag -d)、推送单个/全部标签到远程,以及删除远程标签(需先删本地再git push origin :refs/tags/[name])。这些功能简化了版本管理流程。
2025-10-10 22:03:03
538
原创 版本控制器 git(2)--- git 基本操作
本文介绍了Git的基本操作,包括创建本地仓库、配置用户信息、认识工作区/暂存区/版本库等核心概念。详细讲解了添加文件、修改追踪、版本回退、撤销修改和删除文件等操作,重点阐述了Git通过修改追踪而非文件本身的特点。通过示例演示了如何查看仓库状态、比较差异、提交变更,以及如何使用git reset和git checkout进行版本控制。最后强调了重要操作如版本回退的注意事项,帮助读者掌握Git的基本工作流程和常见问题的解决方法。
2025-10-07 19:01:22
478
原创 版本控制器git(1)--- git 初识与安装
本文介绍了Git版本控制工具的学习目标和基础知识。文章首先明确了5个技术目标:掌握Git企业级应用原理、版本管理、分支管理、远程仓库操作及分布式系统协作。同时提出协作目标,包括理解企业分支策略和开发流程。其次简要说明了Git的安装方法(CentOS/Ubuntu系统)。最后预告将通过案例故事帮助读者理解Git的重要性,为后续深入学习奠定基础。
2025-10-06 18:05:06
414
原创 第十六届蓝桥杯软件赛B组省赛C++题解(京津冀)
本文分享了第十六届蓝桥杯软件赛B组省赛C++的8道题解,包括密密摆放、脉冲强度之和、25之和、旗帜、数列差分、树上寻宝、翻转硬币和破解信息。每道题都给出了算法思路和代码实现,涵盖数学计算、枚举、模拟、贪心、动态规划等多种解题方法。题解注重算法原理分析,提供了暴力模拟和优化解法的双重视角,帮助参赛者理解解题思路并掌握编程实现技巧。
2025-09-27 20:08:54
646
原创 第十六届蓝桥杯软件赛C组省赛C++题解(京津冀)
本文分享了第十六届蓝桥杯软件赛C组省赛(京津冀赛区)的8道题解,包括严密摆放、脉冲强度之和、25之和等题目。每道题都提供了算法思路和C++代码实现,涵盖数学计算、枚举、贪心、双指针、动态规划等多种解题方法。其中最后一题"栈与乘积"给出了线段树和栈模拟两种解法,并详细讨论了数值溢出的处理方式。题解注重算法优化,在保证正确性的前提下尽可能提高效率,适合参赛选手参考学习。
2025-09-27 19:56:00
1208
1
原创 状压 dp
本文介绍了状态压缩动态规划(状压DP)的基本概念和应用。文章首先通过二进制枚举解释状态压缩技巧,即用整数二进制位表示集合元素状态(如灯的开关)。随后通过三道经典例题演示应用:1)GEPPETTO问题使用二进制枚举处理调料冲突;2)关灯问题II将状态视为图节点,用BFS求最短路;3)糖果问题类似关灯问题,通过BFS搜索状态转换。文中强调状态压缩能优化空间和时间复杂度,并提供了详细的代码实现。整体展示了状态压缩在解决组合优化问题中的高效性。
2025-09-12 12:37:57
940
原创 第十六届蓝桥杯软件赛 C 组省赛 C++ 题解
本文是第十六届蓝桥杯软件赛C组省赛的C++题解,共包含8道题目: 数位倍数:暴力枚举1-202504,统计数位和是5倍数的数字个数 2025:统计1-20250412中数字包含至少1个0、2个2、1个5的数字个数 2025图形:找规律输出周期性"2025"图形 最短距离:贪心算法,排序后对应位置差的绝对值之和最小 冷热数据队列:使用哈希表和双向链表模拟数据队列操作 倒水:二分答案,检查能否使所有瓶子水量≥x 拼好数:贪心+分类讨论,统计6的个数并分组 登山:图论+并查集+单调栈,处理二维
2025-09-12 12:37:10
1080
4
原创 最近公共祖先
本文系统介绍了算法竞赛中求解最近公共祖先(LCA)的几种方法。首先解释了LCA的定义和7个重要性质,包括距离公式和遍历顺序特性。然后详细讲解了三种主要解法:朴素向上标记法(单次查询O(n))、树上倍增法(预处理O(nlogn),查询O(logn))和Tarjan离线算法(一次DFS处理批量查询)。文章通过二叉树问题等例题展示了代码实现,比较了各种方法的优缺点,并提供了标准模板题的两种解法代码。最后指出数链剖分等高级方法将在后续文章中介绍。
2025-09-09 18:45:02
1126
原创 状压 dp --- 数据范围小
本文介绍了状态压缩动态规划(状压dp)的应用场景和解题方法。主要内容包括:1.状压dp适用于数据范围小但暴搜会超时的问题;2.通过"糖果"案例讲解状压dp解法,包括状态表示、转移方程和初始化;3.通过"PRZ"案例演示如何枚举子状态解决问题。两个案例分别展示了状压dp的不同应用场景和实现细节,强调状态转移的正确性和避免环路问题。文章提供了完整的代码实现,帮助读者理解状压dp的实际应用。
2025-09-06 17:13:55
915
原创 状压 dp --- 棋盘覆盖问题
本文介绍了状压DP在棋盘覆盖问题中的应用,通过两个典型例题展示了解题思路和代码实现。首先分析了棋盘覆盖问题的特点(小棋盘、方案数巨大),提出用状态压缩和动态规划解决。以"互不侵犯"和"Corn Fields"为例,详细讲解了状态表示、转移方程、预处理优化和边界处理,并给出了完整的C++代码实现。这类问题的核心在于利用位运算高效处理状态约束,通过预处理合法状态降低时间复杂度。文章最后总结了状压DP解决棋盘覆盖问题的通用方法。
2025-09-05 21:11:13
706
原创 状压 dp --- TSP 问题
本文介绍了旅行商问题(TSP)及其状态压缩动态规划解法。TSP要求在n个城市间找到最短哈密顿回路,属于NP完全问题。暴力枚举全排列时间复杂度为O(nn!),而状压DP可优化至O(nn*2^n)。文章详细讲解了状态表示、转移方程、初始化和填表顺序,并提供了两种代码实现版本:先枚举最后一个点或前一个点。最后指出该方法同样适用于求最短Hamilton路径问题。该方法通过状态压缩有效避免了重复访问,适合处理n≤20规模的问题。
2025-09-05 17:55:55
864
原创 C++ 类和对象(一)
本文介绍了C++中类和对象的基础知识,重点对比了C++与C语言在实现栈结构时的差异。主要内容包括:1. 类的定义格式及成员变量/函数的声明方式;2. C++通过封装将数据和方法结合,解决了C语言中命名冲突和传参问题;3. 访问限定符的作用及类域概念;4. 类实例化过程及对象存储机制(只存储成员变量);5. 内存对齐规则及其意义。文章通过具体代码示例展示了C++面向对象编程的优势,如减少前缀、自动关联对象等特性,并解释了类与结构体的区别、内联函数特性等核心概念。
2025-09-03 19:03:15
793
原创 Manacher 算法相关练习题
本文介绍了使用Manacher算法解决四道回文串相关题目:1. ABB题:通过计算最长回文后缀确定需添加字符数量;2. 啦啦队排练题:统计奇数长度回文串频次求解前K大乘积;3. ANT-Antisymmetry题:处理反对称字符串的特殊性质;4. 最长双回文串题:预处理分割点两侧回文长度。各题均给出算法原理和C++实现代码,展示了Manacher算法在回文问题中的灵活应用。文章建议先掌握基础Manacher算法再解题。
2025-09-03 16:08:52
752
原创 Manacher 算法
本文介绍了高效解决回文串问题的Manacher算法。该算法通过构建回文半径数组,利用最右回文串加速填表过程,将时间复杂度优化至O(n)。文章详细讲解了算法原理(包括四种情况分类讨论)、预处理方法、代码实现(仅需4行核心代码)以及模板题目应用。相比O(n²)的中心扩展算法,Manacher算法通过避免指针回退显著提升效率,适合处理大规模数据。作者建议读者通过刻意练习掌握这一算法。
2025-09-02 10:22:11
1526
原创 中心扩展算法
中心扩展算法是一种用于查找回文子串的算法。它通过枚举所有可能的中心点,并向两侧扩展来寻找回文子串。算法首先对字符串进行预处理,在字符间插入特殊字符(如#),将偶回文转换为奇回文,简化处理。然后遍历每个中心点,逐步扩大半径直到字符不匹配,记录最长回文半径。预处理后最长回文半径减1即为原字符串的回文长度。该算法时间复杂度为O(n²),适合处理较短字符串。文中还提到了更高效的Manacher算法,将在后续介绍。
2025-09-01 20:15:08
709
原创 KMP 算法相关练习题
本文分享了四道KMP算法相关的编程题目及解题思路:1)剪花布条问题,通过KMP算法实现非重叠字符串匹配;2)SeektheName问题,利用前缀函数求字符串所有border长度;3)ABB问题,用KMP算法求最长回文后缀长度;4)CensoringS问题,结合栈结构实现字符串消除操作。每道题目都提供了详细算法原理分析和C++代码实现,适合已掌握KMP基础的读者进阶练习。
2025-08-31 09:30:41
1136
原创 线段树相关算法题(5)
线段树在维护区间修改过程中,有些操作是无法“懒”下来的,比如:对整个区间的每一个数执行开根号操作。这时只能从上往下把所有的点全部修改。但是,如果在修改的过程中发现,整个区间在修改到一定程度的时候,整个区间就无需修改。那么,就可以通过剪枝操作,优化区间的修改。这样的线段树也叫势能线段树。
2025-08-30 22:19:07
711
原创 kmp 算法
本文介绍了KMP算法的核心概念和应用。重点讲解了前缀函数的定义、计算方法和用途,包括字符串匹配、周期和循环节判断。通过将模式串与主串拼接后计算前缀函数,可以高效解决字符串匹配问题。文章还提供了KMP算法模板和两个典型题目(PowerStrings和RadioTransmission)的解法,展示了如何利用前缀函数求解字符串周期问题。最后比较了前缀函数版本和传统next数组版本的异同,指出两者本质相同。
2025-08-30 22:18:34
1250
原创 线段树相关算法题(1)
本文分享了两道线段树算法题,从简单到中等难度。第一题"忠诚"是静态区间最小值查询问题,使用基础线段树模板即可解决。第二题"开关"是动态区间修改问题,通过将灯的状态转换为0/1,转化为区间和查询与修改操作,并引入懒标记优化。文章详细讲解了线段树的实现要点,包括结构体设计、pushup/pushdown操作、懒标记处理等核心内容,并提供了完整的代码实现。适合有一定线段树基础的读者进行练习和巩固。
2025-08-24 18:51:02
1156
原创 高阶数据结构---ST表
ST表是一种基于动态规划和倍增思想的高阶数据结构,用于高效解决静态区间查询问题(如区间最值、GCD等)。其预处理时间复杂度为O(nlogn),查询时间为O(1)。ST表通过构建二维稀疏表存储不同长度的区间信息,相比线段树代码更简洁但不支持动态修改。文章详细介绍了ST表的实现原理、查询方法(包括对数优化技巧)和典型应用场景,并提供了RMQ、GCD等模板题的代码实现。适合处理大规模静态数据查询问题。
2025-08-23 18:02:00
1091
原创 01分数规划
【摘要】01分数规划是一种基于二分答案的算法,用于解决从n个物品中选择k个使总性价比最大的问题。传统贪心策略和动态规划方法存在局限,而二分答案结合贪心是有效解法。具体步骤:1)二分枚举可能的性价比x;2)通过check函数验证能否选出k个物品满足条件(将a[i]-x*b[i]排序后取前k大值求和判断)。文章提供了两个模板题:整数二分(小咪买东西)和浮点数二分(Dropping Test),并给出相应代码实现。该算法适用于需要最大化收益代价比的优化问题。
2025-08-23 11:26:27
687
原创 每天两道算法题:DAY4
本文分析了两个算法题目:"开心的金明"和"借教室"。"开心的金明"是01背包模板题,通过动态规划求解,状态f[i][j]表示前i个物品在价格不超过j时价格与重要度乘积的最大值,提供了普通和空间优化两种代码实现。"借教室"采用二分答案+差分算法,通过二分查找第一个无法满足的订单天数,利用差分数组处理区间修改,时间复杂度O(nlogn)。两个题目都强调了基础算法的重要性,01背包需要熟练掌握,而二分查找的关键在于识别问题的二段性特征
2025-08-18 11:10:15
937
原创 每日两道算法题:DAY3
本文解析了两个编程问题:1)棋盘问题要求计算给定尺寸棋盘中的正方形和长方形数量,通过暴力枚举法实现,时间复杂度为O(n⁴);2)USACO模拟题采用贪心策略,将商品按价格排序后优先购买低价商品直至满足需求。两题均强调在实际解题中应根据数据规模选择适当方法,优先保证代码正确性和通过率,复杂的数学推导可留待赛后研究。第一题重点训练矩形枚举技巧,第二题提醒不要过度复杂化简单问题。
2025-08-17 22:17:10
452
原创 每天两道算法题:DAY2
本文解析了两道算法题目:1. 搭配购买问题:该问题可转化为01背包问题,需先预处理合并连通块的价格和价值。提供了三种实现方式(DFS、BFS、并查集)进行连通块合并,再使用01背包动态规划求解。强调01背包问题的重要性,建议完全掌握其原理。2. 最接近神的人问题:本质是求数组逆序对数量,通过归并排序的分治思想实现O(nlogn)解法。指出该模板对后续学习高阶数据结构的重要性,建议理解递归过程并熟练掌握。两道题目均属于模板题,需要深入理解算法原理并熟练实现代码。
2025-08-17 19:45:12
498
原创 每天两道算法题:DAY1
在算法竞赛中,签到题是一定要拿满分的,签到题要的是快准狠,竞赛时千万不能着急、慌张,想明白之后再写,遇到 bug 在草稿纸上仔细模拟,再说一遍,千万不要着急,越着急越错。签到题一般不会很难,当发现自己做不出来时,可能是题目理解错了。一定要仔细读题!!!
2025-08-17 17:19:37
711
原创 从0到1:C++ 语法之引用
引用不是新定义一个变量,而是给已经存在的变量取了一个别名,在语法层面上编译器不会为引用变量开辟内存空间(但引用的底层还是指针,本质上还是要开空间的,本文的最后会带大家看),它和引用的变量共同使用同一块内存空间。比如:水浒传中的李逵,宋江叫“”铁牛,江湖人称“黑旋风”;林冲,外号豹子头。引用的语法:类型& 引用别名 = 引用对象;int& b = a;// b是a的别名int& c = a;int& d = b;
2025-08-14 22:14:52
1567
原创 从0到1:C++ 语法之 nullptr
本文介绍了C++11中引入的nullptr关键字。首先分析了C语言中NULL的不足:NULL在C++中可能被定义为0,导致函数重载时产生歧义。接着详细说明了nullptr的优势:它专门表示空指针,能避免类型转换问题,提高代码安全性。通过多个代码示例展示了NULL和nullptr在函数重载中的不同表现,以及nullptr需要强制类型转换的情况。最后总结建议:在C++中应优先使用nullptr而非NULL来表示空指针。
2025-08-14 16:27:44
299
原创 从0到1:C++ 语法之函数重载
C++函数重载机制解析 本文介绍了C++中的函数重载特性。函数重载允许在同一作用域中使用同名函数,但要求参数类型或数量不同。相比C语言需要为不同类型设计不同函数名,C++通过参数特征区分同名函数,提高了代码灵活性。文章通过实例展示了参数数量不同、类型不同、顺序不同三种重载方式,并指出返回值不同不能构成重载条件。同时解释了带默认参数的函数重载注意事项。函数重载是C++对C语言的重要改进,使代码更具可读性和扩展性。
2025-08-13 12:30:58
763
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅