- 博客(51)
- 收藏
- 关注
原创 P4147 玉蟾宫
题目要求在一个由'F'和'R'组成的N×M网格中,找到全为'F'的最大矩形面积,输出3倍该面积值。解题思路是预处理每列向上连续的'F'个数形成高度数组,然后对每一行使用单调栈算法求直方图最大矩形面积。该方法通过两次扫描(预处理高度和单调栈处理)实现,时间复杂度为O(N×M),适用于大规模数据。最终输出最大面积乘以3的结果。
2026-05-12 21:56:57
391
原创 P2035 [USACO08JAN] iCow B
题目描述了一个音乐播放器的特殊播放算法:每次播放当前权值最高的曲目后,将该曲目的权值平均分配给其他曲目,余数按编号顺序分配。要求输出前T次播放的曲目编号。 解题步骤: 初始化N首曲子的权值 循环T次: 找出当前权值最大的曲目(权值相同取编号最小) 输出该曲目编号 计算平均分配值和余数 将权值清零并分配给其他曲目 余数按编号顺序分配 时间复杂度为O(T*N),在给定数据范围内可以高效运行。示例验证了算法的正确性,代码实现简洁明了。
2026-05-10 18:32:16
423
原创 P1099 [NOIP 2007 提高组] 树网的核
题目要求在树网(无根树)中找到一条长度不超过s的核路径F,使得偏心距ECC(F)最小。核路径必须位于某条直径上,偏心距定义为树中所有点到F的最大距离。 解题步骤: 使用Floyd算法计算所有点对间的最短距离 找出树网的直径(最长路径的两个端点a和b) 枚举直径上所有长度不超过s的路径段作为候选核路径 对每个候选路径,计算所有点到该路径的最大距离(偏心距) 输出所有候选路径中的最小偏心距 关键点:核路径必须位于直径上,使用公式(d[i][k]+d[k][j]-d[i][j])/2计算点到路径的距离。时间复杂度
2026-04-05 17:38:33
431
6
原创 P1064 [NOIP 2006 提高组] 金明的预算方案
本文研究了一个带有主附件约束的背包问题。金明需要在预算n元内购买物品,物品分为主件和附件,购买附件必须先购买对应的主件。通过将每个主件及其附件组合视为一个物品组,问题转化为分组背包问题。采用动态规划方法,定义f[j]为花费j元能获得的最大价值,遍历每个主件时考虑四种可能的购买组合(仅主件、主件+附件1、主件+附件2、主件+两个附件)。算法时间复杂度为O(mn),其中m是物品数,n是预算金额。示例验证表明该方法能正确求解最优购买方案。
2026-04-04 19:48:23
667
4
原创 P1028 [NOIP 2001 普及组] 数的计算
题目要求构造以正整数n开头的数列,其中每个后续元素不超过前一个元素的一半。求所有合法数列的数量。通过动态规划求解,定义f[i]为以i开头的数列个数,递推式为f[i] = 1 + Σf[j](j ≤ i/2)。初始化f[1]=1,依次计算f[2]到f[n],最终f[n]即为答案。时间复杂度O(n²),适用于n≤1000的情况。示例输入6输出6,对应6种合法数列。
2026-03-24 17:14:52
612
13
原创 P1055 [NOIP 2008 普及组] ISBN 号码
本文介绍了一个用于验证ISBN号码识别码正确性的程序。ISBN号码由9位数字、1位识别码和3位分隔符组成,格式为x-xxx-xxxxx-x。识别码的计算方法是将前9位数字分别乘以1至9后求和,再对11取模,若余数为10则识别码为'X',否则为对应数字。程序读取输入的ISBN号码,计算正确的识别码并与输入的最后一位比较:若匹配则输出"Right",否则输出修正后的完整ISBN号码。通过示例演示了计算过程和输出结果,并提供了简洁的C++实现代码。
2026-03-23 21:18:25
563
10
原创 【C++写详细总结①】从for循环到算法初步
本文介绍了C++编程中的基础语法和应用,包括for循环计数器、函数与模块化编程、多重循环、while循环和结构体等核心概念。通过具体代码示例展示了for循环计数器的实现、斐波那契数列计算、函数定义与调用、多重循环解决实际问题等应用场景。文章还提供了相关练习题和进阶建议,帮助读者巩固知识点。内容涵盖从基础语法到结构化编程的过渡,适合初学者系统学习C++编程基础。
2026-03-13 20:37:20
1320
14
原创 P1027 [NOIP 2001 提高组] Car 的旅行路线
题目摘要: Car需要规划从城市A到城市B的最优旅行路线。每个城市有4个机场(位于矩形顶点),同城机场间有高速铁路(单价Ti),不同城机场间有航线(单价t)。给定n组测试数据,每组包含城市数量S、飞机单价t、出发/到达城市编号,以及各城市3个机场坐标和铁路单价。要求计算从城市A任意机场到城市B任意机场的最小总花费,保留1位小数输出。算法通过Floyd最短路计算同城铁路和跨城航线的组合最优解,时间复杂度为O((4S)³)。
2026-03-11 21:14:20
458
1
原创 P1173 [NOI2016] 网格
摘要 本文研究跳蚤和蛐蛐在网格上的连通性问题。给定n×m网格和c个蛐蛐位置,需要判断能否通过将部分跳蚤替换为蛐蛐,使得剩余跳蚤不再全部连通。若能实现,则求最小替换数。核心解法是:1) 当剩余空地≤1时输出-1;2) 对障碍物周围2格范围进行网格压缩;3) 检查是否已被自然分割;4) 寻找关键割点位置;5) 若无割点则默认需替换2个。算法利用哈希表高效处理大规模网格,通过BFS和Tarjan算法分析连通性,时间复杂度与障碍物数量相关。
2026-03-11 18:35:41
731
原创 编辑器使用规则
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:撤销:Ctrl/Command + Z重做:Ctrl/Command + Y加粗:Ctrl/Command + B斜体:Ctrl/Command + I标题:Ctrl/Command + S
2026-03-10 22:03:05
433
3
原创 P1084 [NOIP 2012 提高组] 疫情控制
题目摘要:H国需要部署军队在城市建立检查点,防止疫情从首都扩散到边境城市。给定城市间的树形道路网络和军队初始位置,求控制疫情所需的最少时间。军队可同时移动,但首都不能设检查点。若无法控制则输出-1。 解题思路:采用二分法寻找最小时间,通过检验函数判断给定时间内能否满足条件。算法分为预处理(构建倍增表)、军队移动、标记覆盖状态、贪心匹配等步骤,最终确定能否在限定时间内覆盖所有边境路径。
2026-03-10 18:05:31
772
2
原创 P1038 [NOIP 2003 提高组] 神经网络
本文实现了一个简化的神经网络模型模拟程序。该程序首先读取神经元数量n和连接数p,然后初始化每个神经元的状态和阈值。通过拓扑排序处理神经元激活顺序,当神经元状态大于0时,它会将信号按权重传递给连接的神经元。传播过程中,非输出层神经元在传播后会清零状态。最后,程序输出所有状态大于0的输出层神经元,若无则输出"NULL"。该程序通过邻接矩阵存储网络结构,使用队列进行拓扑处理,模拟了神经网络的信息传播机制。
2026-03-09 20:18:56
771
9
原创 P1017 [NOIP 2000 提高组] 进制转换
本文介绍了将十进制数转换为负进制数的算法。通过递归函数处理转换过程,巧妙解决了负数取余问题:当余数为负时,调整余数为正并修正被除数。算法支持基数为负数的情况(如-2进制),并将10以上的数字转为字母表示。主函数读取输入后调用转换函数,按格式输出结果。该算法简洁高效,适用于|n|≤37336且-20≤R≤-2的数据范围。
2026-03-08 21:35:53
1064
2
原创 P1048 [NOIP 2005 普及组] 采药
摘要:题目描述辰辰需要在时间限制T内采摘山洞中的M株草药,每株草药有采摘时间和价值。目标是最大化采摘草药的总价值。这是一个典型的01背包问题,使用动态规划求解。状态定义为dp[j]表示时间不超过j时的最大价值,状态转移方程为dp[j] = max(dp[j], dp[j - time[i]] + value[i])。通过倒序遍历确保每株草药只采一次。代码实现了该算法,时间复杂度为O(M×T)。
2026-03-01 10:42:12
1201
2
原创 多叉树深度解析
多叉树是一种每个节点可拥有任意数量子节点的树形结构,比二叉树更贴近现实层级关系。文章系统介绍了多叉树的核心概念、存储结构和遍历算法:三种主要存储方式(孩子链表、左孩子右兄弟、双亲表示法)各具特点;深度优先和广度优先遍历适用于不同场景;在文件系统、组织架构等领域的应用展示了其优势。多叉树通过灵活的子节点管理,有效解决了复杂层级数据的表示和处理问题。
2026-02-28 09:48:23
428
2
原创 P1036 [NOIP 2002 普及组] 选数
题目要求从n个整数中选取k个数组合,统计这些组合的和为素数的个数。使用DFS枚举所有可能的组合,避免重复选择。对于每个组合的和,进行素数判断(试除法)。当组合数达到k时,检查当前和是否为素数,是则计数加1。时间复杂度为组合数C(n,k)乘以素数判断时间,在n≤20的范围内可行。
2026-02-25 08:53:57
285
1
原创 P2010 [NOIP 2016 普及组] 回文日期
题目要求计算两个给定日期之间的回文日期数量。回文日期是指8位数字表示的年月日完全对称(如20100102)。解决方法是遍历日期范围内的每一天,检查是否为合法日期且数字回文。关键步骤包括:1)拆分年月日;2)判断闰年;3)验证日期合法性;4)检查数字回文性。该方法简单直观,虽然效率不高但足以通过题目测试数据。
2026-02-24 15:44:48
1286
原创 可持久化trie深度解析(二)
可持久化Trie深度解析 可持久化Trie是一种能保留所有历史版本的字典树数据结构,通过节点复用技术实现高效存储。核心思想是每次插入只复制路径上的节点(约32个),其余节点与历史版本共享。相比普通Trie,它支持历史版本查询、区间最大异或等高级操作。 实现要点: 使用节点池预分配内存 每个节点记录子节点索引和经过的数字个数 插入操作返回新版本根节点 区间查询通过两个版本根节点相减实现 典型应用: 区间最大异或查询(O(logV)时间) 异或第k大查询 历史版本回溯 离线预处理所有前缀信息 空间复杂度O(nl
2026-02-18 19:32:32
370
3
原创 可持久化线段树深度解析(一)
可持久化(Persistent Data Structure)是一种数据结构,它在修改操作后能够保留所有历史版本,允许访问任意历史版本的状态。核心思想:每次修改时,不直接覆盖原有数据,而是创建新的节点,复用未修改的部分。类比普通数据结构:在白纸上修改,旧信息丢失可持久化数据结构:在透明胶片上修改,所有历史版本叠加保存。
2026-02-17 14:19:33
496
原创 动态规划深度解析:状态定义
动态规划是一种通过分解重叠子问题并存储子问题解来优化计算的算法方法。其核心包括状态定义、转移方程、初始条件和答案提取四要素。动态规划可分为自顶向下(记忆化搜索)和自底向上(递推)两种实现方式,前者更直观但可能栈溢出,后者效率高但可能计算无用状态。常见动态规划类型包括线性DP、区间DP、背包DP等,各具特点和应用场景。例如最长上升子序列(LIS)和最大子数组和(Kadane算法)展现了线性DP的典型决策模式,而0-1背包和完全背包则通过不同遍历顺序实现物品选取次数的控制。动态规划适用于具有最优子结构和重叠子问
2026-02-12 21:36:08
220
2
原创 链表深度解析:从内存布局到工程实践
链表是一种非连续存储的线性数据结构,由包含数据和指针的节点组成。核心特点包括动态内存分配、逻辑连续物理离散的结构,以及高效的插入/删除操作(O(1)时间复杂度)。主要类型有单向、双向、循环和静态链表,各具特点:单向链表节省空间,双向链表支持双向遍历,循环链表形成环形结构。链表在操作系统、数据库等领域有广泛应用,与数组形成互补——数组擅长随机访问,链表擅长动态操作。基本操作包括创建、遍历、插入和删除,实现时需注意内存管理。双向和循环链表通过额外指针优化了特定场景下的操作效率。
2026-02-12 18:25:38
477
原创 有向图欧拉回路深度解析:从柯尼斯堡七桥到现代网络
欧拉回路:图论经典问题解析 欧拉回路源于1736年欧拉解决的柯尼斯堡七桥问题,开创了图论研究。核心概念包括:欧拉回路(经过每条边一次并返回起点的回路)、欧拉路径(不要求闭合的路径)。判定定理指出,有向连通图存在欧拉回路当且仅当所有顶点入度等于出度。构造算法以Hierholzer算法为主,通过深度优先搜索和边删除策略实现,时间复杂度为O(E)。Fleury算法则采用避桥策略。这些理论不仅具有历史意义,更为现代图论算法奠定了基础,在计算机网络、基因组组装等领域有重要应用。
2026-02-12 12:27:13
155
原创 有向无环图深度解析:从数学基础到工程实践
有向无环图(DAG)是计算机科学中重要的数据结构,用于表示无环的依赖关系。本文系统介绍了DAG的核心特性:1)数学本质是偏序关系的表达工具;2)与树的区别在于允许多父节点和多路径;3)存储结构包括邻接表、边集数组等;4)拓扑排序算法(BFS/DFS)及其数学意义;5)动态规划应用,如最长路径、最短路径计算;6)传递闭包和压缩技术。文中提供了多种C++实现代码,并分析了算法复杂度。DAG因其无后效性特点,成为解决依赖关系问题的理想模型。
2026-02-12 11:29:48
284
原创 二叉树深度解析:从数学基础到工程实践
本文系统介绍了二叉树这一重要数据结构。首先阐述了二叉树的定义与广泛应用场景,包括编译器设计、数据库索引、AI决策树等。其次详细讲解了二叉树的数学性质,如节点数量关系、特殊二叉树类型等。在存储结构方面,对比了数组和链式两种实现方式的优缺点。重点分析了四种遍历算法(前序、中序、后序、层序)的递归与非递归实现,并比较了它们的复杂度。最后介绍了如何通过遍历序列重建二叉树。全文通过代码示例和理论分析相结合,展现了二叉树作为计算机科学基础数据结构的重要地位和实际应用价值。
2026-02-12 10:46:44
307
原创 六大排序算法深度解析:从原理到工程实践
本文系统分析了六种经典排序算法,通过对比表展示其时间复杂度、空间复杂度等核心指标。重点介绍了快速排序的分治思想与优化策略(随机基准、三数取中等),归并排序的稳定合并特性及其非递归实现,堆排序的堆化过程与迭代优化,以及插入排序的小数组优势。每种算法都配有精简的C++实现代码,并详细说明了其适用场景和优化方法,为不同应用场景下的算法选择提供了实用参考。
2026-02-12 10:11:50
733
原创 拓扑排序深度解析:从理论基础到工程实践
拓扑排序是一种针对有向无环图(DAG)的线性排序算法,它将顶点排列成序列,保证对于任意边u→v,u总在v前出现。该算法广泛应用于任务调度、课程规划等依赖关系场景。核心实现包括统计入度、选择起点、消除影响三个步骤,时间复杂度为O(V+E)。除基础BFS实现外,还有DFS后序反转、优先队列字典序优化等变体。算法还能检测图中是否存在环(当拓扑序列长度小于顶点数时)。性能测试显示,BFS队列版在通用场景下效率最高,而优先队列版适用于需要字典序最小解的特殊需求。
2026-02-11 22:33:23
223
原创 埃拉托斯特尼筛法深度解析:经典素数筛法的现代优化与实现
埃拉托斯特尼筛法是一种高效的素数筛选算法,其核心思想是通过标记合数来筛选素数。基础实现使用bool数组,时间复杂度为O(n log log n)。优化版本解决了整数溢出问题,采用位压缩技术可节省87.5%内存。缓存优化通过分块处理提升性能,而奇数优化则减少了一半计算量。这些改进使该算法能高效处理大范围素数筛选,适用于需要高性能素数计算的场景。
2026-02-11 16:49:36
168
原创 C++欧拉筛深度解析:线性时间素数筛法的精妙实现
欧拉筛是一种高效的线性素数筛选算法,通过确保每个合数仅被其最小质因数标记一次,将时间复杂度优化至O(n)。相比传统埃氏筛法(O(n log log n)),欧拉筛避免了重复标记,核心在于if(i%x==0) break的关键终止条件。C++实现简洁,可同时计算欧拉函数等积性函数,并支持内存优化(位压缩)和分块处理超大范围。实际应用中,欧拉筛在算法竞赛和数论计算中表现优异,尤其适合需要快速素数查询或同时计算其他数论函数的场景。尽管常数因子略高,但其理论最优性使其成为大规模素数筛选的首选方案。
2026-02-11 13:41:24
968
3
原创 P1045 [NOIP 2003 普及组] 麦森数
本文介绍了计算麦森数 (2^P-1) 的位数和最后500位数字的高效算法。通过数学公式直接计算位数,并采用高精度乘法优化计算过程。核心思路是利用数组存储十进制数,每次乘(2^{60})减少循环次数,最后处理借位并格式化输出。算法通过位运算和进位处理高效完成大数计算,适用于超大指数情况(P<3100000)。代码实现简洁,先输出总位数,再分10行输出最后500位数字,每行50位,不足补零。
2026-02-11 09:19:33
894
3
原创 P1035 [NOIP 2002 普及组] 级数求和
摘要: 题目要求计算调和级数 ( S_n = 1 + \frac{1}{2} + \cdots + \frac{1}{n} ) 首次超过给定整数 ( k ) 的最小 ( n )。通过暴力枚举,从 ( n=1 ) 开始累加倒数,直到 ( S_n > k ) 时终止。算法时间复杂度为 ( O(n) ),适用于 ( k \leq 15 ) 的数据范围(如 ( k=15 ) 时 ( n \approx 1.6 \times 10^6 ))。代码示例通过循环实现,输入 ( k=1 ) 时输出 ( n=2 )。
2026-02-11 09:17:08
348
原创 P1029 [NOIP 2001 普及组] 最大公约数和最小公倍数问题
题目要求找出满足条件的正整数对 (P, Q),使得它们的最大公约数为 x0,最小公倍数为 y0。解题思路是先将问题转化为求互质的因数对 (a, b),使得 a×b=y0/x0。若 y0 不是 x0 的倍数,则无解。否则枚举 a 的所有因数,检查是否与对应的 b 互质,并统计满足条件的对数。时间复杂度为 O(√t log t),其中 t=y0/x0。代码通过枚举因数和求最大公约数来验证条件,最终输出解的对数。
2026-02-11 09:13:01
336
原创 P1344 [USACO4.4] 追查坏牛奶 Pollutant Control
本文研究了三鹿牛奶公司运输网络中的最小割问题。通过将仓库建模为节点、运输卡车为有向边,将阻止问题转化为网络流中的最小割问题。采用Dinic算法求解最大流,并创新性地通过边权重设(w*(m+1)+1)实现双重优化目标:在保证总损失最小的前提下,使停止的卡车数最少。最终通过分解流量结果得到最小损失和最少卡车数。算法时间复杂度为O(N²M),适用于题目给定的数据规模。
2026-02-10 22:33:40
880
原创 P1155 [NOIP 2008 提高组] 双栈排序
本文研究了利用双栈实现排列排序的问题。给定一个1~n的排列,通过四个操作(压入/弹出两个栈)判断是否能将其排序,并输出字典序最小的操作序列。算法首先预处理后缀最小值构建冲突图,进行二分图染色判定可行性,然后模拟操作过程优先选择字典序小的操作。若染色失败则输出0,否则输出最小操作序列。示例输入1 3 2 4输出"a b a a b b a b",而2 3 4 1则不可行输出0。
2026-02-10 22:15:21
684
1
原创 P1021 [NOIP 1999 提高组] 邮票面值设计
摘要:本文探讨了在给定邮票数量限制(最多N张)和邮票种类数K(N+K≤15)的条件下,如何设计邮票面值以最大化连续可表示的邮资范围。通过动态规划计算当前面值组合能表示的最大连续邮资值,并使用深度优先搜索遍历所有可能的面值组合,最终确定最优解。例如,当N=3、K=2时,最优面值为1和3分,可连续表示1到7分的邮资。代码实现了该算法并输出最优面值组合及最大连续邮资值。
2026-02-08 17:33:22
672
原创 P1700 [USACO19OPEN] Milk Factory B
摘要:题目要求在给定N个节点和N-1条有向边的树形结构中,判断是否存在一个根节点,使得从其他所有节点都能到达该节点。通过DFS遍历每个节点,检查是否能访问所有节点,若存在则输出最小编号的根节点,否则输出-1。算法时间复杂度为O(N²),核心思路是验证每个节点作为根节点的可达性。
2026-02-06 09:06:26
830
3
原创 P4224 [清华集训 2017] 简单数据结构
本文提出了一种动态维护最长上升倍数子序列的高效算法。该算法基于双端队列结构,在队列两端进行插入/删除操作时,通过增量更新关键状态数组来避免重新计算整个序列。核心数据结构包括记录元素位置、序列长度和数量的数组,以及全局统计表。算法针对四种操作分别设计了处理逻辑:前端插入只需处理倍数关系,后端插入需处理因子关系并重新计算受影响元素的状态。通过因子遍历优化和状态递推更新,算法在O(√val)或O(m/val)时间内完成每次操作。该方案适用于元素互不相同的序列,能高效维护最长子序列长度及其不同开头数。
2026-02-05 15:55:44
2722
2
原创 P1529 [USACO2.4] 回家 Bessie Come Home
题目描述了一个牧场最短路径问题,要求找出距离谷仓Z最近的母牛所在牧场。母牛分布在大写字母A-Y标记的牧场,小写字母牧场无牛。输入给出P条道路连接情况(带权边),输出离Z最近的母牛所在牧场及其最短路径长度。核心算法采用DFS+剪枝策略,通过邻接矩阵存储图结构,并利用dis数组记录最短距离进行优化。最终遍历所有大写字母牧场,找出离Z最近的母牛位置。示例输入输出展示了算法正确性,如输入5条边时输出B 11,表示B牧场母牛到Z的最短路径为11。
2026-02-05 10:08:31
1683
1
原创 P1113 杂务
这实际上是一个动态规划其中z1...zk是x的前置任务。最终答案是所有dp[i]的最大值,因为整个工程结束时间取决于最晚完成的任务。
2026-02-05 10:00:52
819
1
该文档内容为空加密文件头数据,无有效文本信息可供总结
2026-05-12
求一篇C++题解,Happy New Year
2026-02-16
请各位朋友们给一个C++题解
2026-02-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅