洛谷NOIP题解
文章平均质量分 84
我头发还没掉光~
博主经常上线,互三必回哦~~
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
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 · 349 阅读 · 5 评论 -
P1064 [NOIP 2006 提高组] 金明的预算方案
本文研究了一个带有主附件约束的背包问题。金明需要在预算n元内购买物品,物品分为主件和附件,购买附件必须先购买对应的主件。通过将每个主件及其附件组合视为一个物品组,问题转化为分组背包问题。采用动态规划方法,定义f[j]为花费j元能获得的最大价值,遍历每个主件时考虑四种可能的购买组合(仅主件、主件+附件1、主件+附件2、主件+两个附件)。算法时间复杂度为O(mn),其中m是物品数,n是预算金额。示例验证表明该方法能正确求解最优购买方案。原创 2026-04-04 19:48:23 · 485 阅读 · 3 评论 -
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 · 521 阅读 · 12 评论 -
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 · 476 阅读 · 9 评论 -
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 · 403 阅读 · 0 评论 -
P1084 [NOIP 2012 提高组] 疫情控制
题目摘要:H国需要部署军队在城市建立检查点,防止疫情从首都扩散到边境城市。给定城市间的树形道路网络和军队初始位置,求控制疫情所需的最少时间。军队可同时移动,但首都不能设检查点。若无法控制则输出-1。 解题思路:采用二分法寻找最小时间,通过检验函数判断给定时间内能否满足条件。算法分为预处理(构建倍增表)、军队移动、标记覆盖状态、贪心匹配等步骤,最终确定能否在限定时间内覆盖所有边境路径。原创 2026-03-10 18:05:31 · 686 阅读 · 1 评论 -
P1038 [NOIP 2003 提高组] 神经网络
本文实现了一个简化的神经网络模型模拟程序。该程序首先读取神经元数量n和连接数p,然后初始化每个神经元的状态和阈值。通过拓扑排序处理神经元激活顺序,当神经元状态大于0时,它会将信号按权重传递给连接的神经元。传播过程中,非输出层神经元在传播后会清零状态。最后,程序输出所有状态大于0的输出层神经元,若无则输出"NULL"。该程序通过邻接矩阵存储网络结构,使用队列进行拓扑处理,模拟了神经网络的信息传播机制。原创 2026-03-09 20:18:56 · 698 阅读 · 8 评论 -
P1017 [NOIP 2000 提高组] 进制转换
本文介绍了将十进制数转换为负进制数的算法。通过递归函数处理转换过程,巧妙解决了负数取余问题:当余数为负时,调整余数为正并修正被除数。算法支持基数为负数的情况(如-2进制),并将10以上的数字转为字母表示。主函数读取输入后调用转换函数,按格式输出结果。该算法简洁高效,适用于|n|≤37336且-20≤R≤-2的数据范围。原创 2026-03-08 21:35:53 · 929 阅读 · 1 评论 -
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 · 1103 阅读 · 2 评论 -
P1036 [NOIP 2002 普及组] 选数
题目要求从n个整数中选取k个数组合,统计这些组合的和为素数的个数。使用DFS枚举所有可能的组合,避免重复选择。对于每个组合的和,进行素数判断(试除法)。当组合数达到k时,检查当前和是否为素数,是则计数加1。时间复杂度为组合数C(n,k)乘以素数判断时间,在n≤20的范围内可行。原创 2026-02-25 08:53:57 · 186 阅读 · 0 评论 -
P2010 [NOIP 2016 普及组] 回文日期
题目要求计算两个给定日期之间的回文日期数量。回文日期是指8位数字表示的年月日完全对称(如20100102)。解决方法是遍历日期范围内的每一天,检查是否为合法日期且数字回文。关键步骤包括:1)拆分年月日;2)判断闰年;3)验证日期合法性;4)检查数字回文性。该方法简单直观,虽然效率不高但足以通过题目测试数据。原创 2026-02-24 15:44:48 · 1191 阅读 · 0 评论 -
P1045 [NOIP 2003 普及组] 麦森数
本文介绍了计算麦森数 (2^P-1) 的位数和最后500位数字的高效算法。通过数学公式直接计算位数,并采用高精度乘法优化计算过程。核心思路是利用数组存储十进制数,每次乘(2^{60})减少循环次数,最后处理借位并格式化输出。算法通过位运算和进位处理高效完成大数计算,适用于超大指数情况(P<3100000)。代码实现简洁,先输出总位数,再分10行输出最后500位数字,每行50位,不足补零。原创 2026-02-11 09:19:33 · 843 阅读 · 2 评论 -
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 · 260 阅读 · 0 评论 -
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 · 254 阅读 · 0 评论 -
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 · 604 阅读 · 0 评论 -
P1021 [NOIP 1999 提高组] 邮票面值设计
摘要:本文探讨了在给定邮票数量限制(最多N张)和邮票种类数K(N+K≤15)的条件下,如何设计邮票面值以最大化连续可表示的邮资范围。通过动态规划计算当前面值组合能表示的最大连续邮资值,并使用深度优先搜索遍历所有可能的面值组合,最终确定最优解。例如,当N=3、K=2时,最优面值为1和3分,可连续表示1到7分的邮资。代码实现了该算法并输出最优面值组合及最大连续邮资值。原创 2026-02-08 17:33:22 · 608 阅读 · 0 评论 -
P1022 [NOIP 2000 普及组] 计算器的改良
本文介绍了一个解一元一次方程的程序实现。题目要求处理包含整数、小写字母和+、-、=符号的合法方程,输出精确到小数点后三位的解。程序通过预处理为缺少系数的未知数项添加1,然后分别处理等号两边的未知数项系数和常数项,最后进行移项和系数归一化计算。关键步骤包括:合并同类项、移项变号、系数化一,并特别注意处理结果为-0.000的情况。代码使用C++实现,通过遍历字符串解析方程,最终输出形如"x=0.750"的解。原创 2026-02-01 09:19:03 · 771 阅读 · 0 评论 -
P1023 [NOIP 2000 普及组] 税收与补贴问题
摘要:该题要求确定政府对某商品的最少税收或补贴金额,使商家在预期价格上获得最大利润。通过计算不同价位下的销量和利润,解不等式确定税收或补贴的范围,并选取绝对值最小的解。若无法实现目标则输出"NO SOLUTION"。算法需处理线性销量变化和利润最大化条件,最终输出整数解。原创 2026-02-03 09:59:29 · 1198 阅读 · 0 评论 -
P1016 [NOIP 1999 普及组/提高组] 旅行家的预算
摘要: 该问题要求计算从起点到终点的最小加油费用。给定汽车油箱容量C、每升油行驶距离L、沿途加油站位置及油价,采用贪心算法策略:每次在当前加油站加恰好能到达下一个更便宜加油站的油量,若无更便宜则加满油并前往可达的最便宜加油站。若无法到达终点则输出无解。代码通过排序加油站位置,逐步计算最优加油方案,确保费用最小。示例输入输出验证了算法正确性。原创 2026-01-29 16:54:34 · 807 阅读 · 0 评论 -
P1014 [NOIP 1999 普及组] Cantor 表
摘要:本文介绍了一个数学问题,要求按照Georg Cantor证明有理数可枚举时使用的Z字形表格,找到第N个分数。解题思路是模拟Z字形对角线遍历过程,从(1,1)开始交替向右上或左下移动,直到找到第N项。代码实现中通过循环和条件判断来控制移动方向,最终输出对应的分数形式。该方法利用暴力枚举在数据规模较小时有效解决问题。原创 2026-01-28 17:03:45 · 414 阅读 · 0 评论 -
P1002 [NOIP 2002 普及组] 过河卒
摘要:本文介绍了一个动态规划问题——"马拦过河卒"。题目要求计算从棋盘(0,0)点到(n,m)点的路径数,其中卒只能向右或向下移动,同时要避开马及其控制点。解题思路是将坐标统一+1,使用动态规划公式f(i,j)=f(i-1,j)+f(i,j-1),并标记马的控制点为不可达。需要注意数组越界问题和使用long long类型。代码实现了该算法,通过预处理马的控制点并递推计算路径数。时间复杂度为O(nm),适用于n,m≤20的情况。原创 2026-01-27 18:28:47 · 590 阅读 · 0 评论 -
P1004 [NOIP 2000 提高组] 方格取数
题目描述一个N×N方格图,要求从左上角到右下角走两次,每次只能向右或向下移动,取走经过方格的数字(取后变0),求两次路径取得数字的最大和。使用三维动态规划,同时考虑两条路径的状态转移,避免重复取数。核心思想是通过步数i和两条路径的横坐标j、k来降维优化,状态转移时考虑四种移动组合,最终答案为dp[2n][n][n]。代码实现了这一算法,时间复杂度为O(N^3)。原创 2026-01-25 22:08:28 · 364 阅读 · 0 评论 -
P1046 [NOIP 2005 普及组] 陶陶摘苹果
题目描述陶陶摘苹果问题:已知10个苹果的高度和陶陶伸手能达到的最大高度(可站在30cm板凳上)。要求计算她能摘到的苹果数量。输入两行数据:第一行是10个100-200cm的苹果高度,第二行是陶陶100-120cm的伸手高度。输出可摘苹果数。解题思路:遍历苹果高度,若苹果高度≤陶陶身高+30则计数。样例输入输出展示了当苹果高度为给定值且陶陶身高110cm时,可摘5个苹果。代码实现使用数组存储苹果高度,通过循环比较统计可摘数量。原创 2026-01-25 21:57:12 · 305 阅读 · 0 评论
分享