- 博客(23)
- 收藏
- 关注
原创 Packets 分层贪心
题目概述 题目描述了一个工厂需要将不同尺寸(1×1到6×6)的产品装箱运输,箱子尺寸固定为6×6。目标是计算最少需要多少个箱子才能装下所有产品。 解题思路 采用贪心算法,按产品尺寸从大到小装箱: 6×6:直接占用一个箱子。 5×5:每个5×5产品装箱后,剩余空间用1×1产品填充。 4×4:每个4×4产品装箱后,剩余空间优先用2×2产品填充,不够再用1×1产品。 3×3:每4个3×3产品可装满一个箱子,剩余部分根据数量分类处理,剩余空间尽量用2×2和1×1产品填充。 2×2:尽量装满箱子,剩余空间用1×1产品
2026-04-22 11:26:21
251
原创 Jack DP 滚动数组
本文介绍了POJ 1992题"Jack"的解题思路。题目要求计算在R×S网格中从左上角到右下角的路径数,只能向右或向下移动且不能穿过墙壁。使用动态规划方法,定义dp[i][j]为到(i,j)的路径数,状态转移方程为dp[i][j] = dp[i-1][j] + dp[i][j-1]。通过滚动数组优化空间复杂度至O(S)。代码实现时逐行处理输入,遇到墙壁则置0,否则累加上方和左方的路径数。最终输出右下角格子的路径数。
2026-04-22 10:51:29
465
原创 MIT 6.S081: Operating System Engineering Lab: system calls
系统调用实验实现摘要 本实验通过向xv6操作系统添加两个新的系统调用来深入理解系统调用机制: trace系统调用:允许追踪特定系统调用的执行情况 通过位掩码指定要追踪的系统调用 在系统调用执行时打印调用信息(PID、调用名、返回值) 实现涉及用户态声明、内核态处理、进程结构扩展和fork继承 sysinfo系统调用:获取系统状态信息 统计空闲内存和活跃进程数 需要在内核和用户空间之间复制数据 实现涉及内存统计、进程状态遍历和copyout机制 实验重点: 理解用户态到内核态的切换流程 掌握系统调用参数传递机
2026-04-21 12:15:27
616
原创 Supermarket 排序 + 并查集
摘要:本文介绍了超市商品销售调度问题,目标是在截止时间前安排商品销售以获得最大利润。通过按利润从高到低排序商品,并使用并查集快速查找可用时间槽,确保每个商品在截止时间前完成销售。算法核心思想是优先处理高利润商品,并动态维护空闲时间,实现最优调度。代码示例展示了如何实现该算法,输入包含商品利润和截止时间,输出最大利润。该方法高效解决了商品调度问题,适用于大规模数据。
2026-04-20 14:56:26
551
原创 Gone Fishing 贪心 优先队列
题目摘要:John要在n个湖泊中钓鱼,总时间为h小时。每个湖初始鱼数为fi,每次钓鱼后减少di。只能按顺序访问湖泊,移动时间ti为5分钟的整数倍。目标是规划每个湖的停留时间,使钓鱼总数最大。若有多个最优解,选择字典序最大的方案。输入包含多组测试数据,每组输出各湖停留时间(分钟)和预期钓鱼总数,不同测试用例间用空行分隔。
2026-04-20 08:15:44
472
原创 跳蚱蜢 BFS
这道题目考察的是通过最少的跳跃次数将蚱蜢排列从顺时针顺序变为逆时针顺序。解题思路采用BFS算法,从初始状态出发,通过四种可能的跳跃方式(相邻或跨越一个蚱蜢)逐步探索所有可能的状态,直到找到目标状态。关键点在于使用队列处理状态转换,并用哈希集合记录已访问状态以避免重复计算。最终输出从初始状态到目标状态所需的最少跳跃次数。该算法能有效解决这类状态转换问题,确保找到最优解。
2026-04-19 00:19:50
132
原创 三羊献瑞 DFS 枚举
摘要:题目给出一个汉字加法算式"祥瑞生辉+三羊献瑞=三羊生瑞气",要求找出"三羊献瑞"对应的四位数字。通过DFS枚举每个汉字对应的数字(0-9),并利用剪枝条件(数字不重复、首位不为0)来优化搜索。当找到满足算式的数字组合时,输出"三羊献瑞"对应的四位数1085(唯一解)。代码使用深度优先搜索实现,时间复杂度为O(10^8),但通过剪枝可有效减少搜索空间。
2026-04-19 00:19:30
143
原创 连号区间数 暴力
题目摘要:给定一个1~N的全排列,要求统计其中所有连号区间的数量。连号区间定义为排序后形成连续数列的子区间。关键观察是:当区间最大值与最小值之差等于区间长度时即为连号区间。通过双重循环枚举所有子区间,检查该条件即可统计结果。时间复杂度为O(N^2),适用于N≤5×10^4的规模。
2026-04-18 13:17:09
334
原创 全球变暖 BFS
题目要求统计会被完全淹没的岛屿数量。每个岛屿由相邻的'#'组成,当岛屿的所有陆地都与海洋相邻时,该岛屿会被完全淹没。解题步骤包括:遍历地图,对每个未访问的岛屿进行BFS/DFS搜索,统计岛屿总格子数和边缘格子数(与海洋相邻的格子)。若两者相等,则该岛屿会被完全淹没,计入结果。算法时间复杂度为O(N^2),适用于N≤1000的情况。关键点在于正确识别岛屿边缘和判断完全淹没条件。
2026-04-18 12:51:10
160
原创 调手表 BFS
题目要求计算在模n的环上,从0出发通过+1和+k两种操作,到达任意时间点所需的最少操作次数的最大值。这可以转化为图论中的最短路径问题,使用BFS遍历所有可能的时间点,记录每个点的最短距离,最后找出最大距离。 具体步骤: 初始化距离数组dist,全设为-1,表示未访问 使用队列进行BFS,从0开始 每次取出队首元素,尝试+1和+k两种操作 如果新时间点未被访问过,则更新距离并入队 遍历完成后,找出dist数组中的最大值作为答案 时间复杂度为O(n),空间复杂度为O(n),适用于n≤10^5的情况。
2026-04-17 12:12:09
439
原创 最优包含 DP
本文解决了如何最少修改字符串S使其包含子序列T的问题。采用动态规划方法,定义dp[i][j]表示S前i个字符包含T前j个字符所需的最少修改次数。初始化时,空字符串情况分别处理。状态转移考虑两种情况:当前字符匹配时直接继承前状态,不匹配时取修改或跳过的最小值。最终结果为dp[n][m],其中n和m分别为S和T的长度。示例代码实现了该算法,时间复杂度为O(nm)。
2026-04-17 11:53:17
149
原创 X 进制减法 位权
题目要求计算两个X进制数A和B的最小可能差值。X进制数的每一位进制可以不同,但必须满足A≥B,且每位数字小于其进制数。关键思路是:通过降低高位的进制权重来最小化差值。具体实现时,从低位到高位处理,每位进制取max(a[i]+1, b[i]+1, 2),确保合法性,同时累加差值并取模。时间复杂度为O(max(Ma, Mb)),适用于大规模数据。
2026-04-16 21:11:51
614
原创 N皇后问题 DFS 回溯
摘要:N皇后问题要求在N×N棋盘上放置N个皇后,使其互不攻击(不在同一行、列或对角线上)。采用回溯法解决:逐行放置皇后,检查列和两个对角线是否冲突,使用三个数组记录占用状态。时间复杂度为O(N!),空间复杂度O(N)。输入N≤10,输出合法放置方案数。例如,输入5时输出10。该方法通过深度优先搜索递归实现,满足题目要求的运行限制(1秒内完成)。
2026-04-15 14:58:16
616
原创 Radar Installation 贪心
题目要求在海岸线上安装最少数量的雷达,覆盖海洋中的若干小岛。每个雷达的覆盖范围是d,小岛的位置由坐标给出。关键步骤包括: 检查每个小岛是否在雷达的可覆盖范围内(y ≤ d),否则直接输出-1 将每个小岛的覆盖范围转换为x轴上的区间 使用贪心算法求解最少雷达数量:按区间右端点排序,每次在无法覆盖时新增雷达 算法时间复杂度为O(nlogn),主要来自排序操作。该问题转化为经典的区间覆盖问题,通过贪心选择最优解。
2026-04-15 11:39:31
600
原创 统计子矩阵 前缀和 滑动窗口
题目要求统计满足子矩阵和不超过K的所有可能子矩阵数量。通过二维前缀和预处理后,采用优化方法:先固定行范围,将列压缩为一维数组,再使用滑动窗口技术统计满足条件的子矩阵。该方法将时间复杂度优化至O(N^2M),适用于给定约束条件。具体步骤包括预处理列前缀和、枚举行范围、滑动窗口统计有效子矩阵数,最终输出满足条件的子矩阵总数。
2026-04-14 23:21:27
801
原创 机房 LCA
摘要:题目描述了一个由n台电脑组成的树形网络结构,每台电脑的通信延迟取决于其连接的电脑数量。给定m个查询,要求计算从电脑u到v的最短通信时间。通过分析,该问题转化为计算树上路径点权之和,可以利用LCA(最近公共祖先)算法高效求解。示例代码展示了如何预处理每个节点的深度、父节点信息以及到根节点的累计权值,从而快速回答任意两点间的路径权值和查询。
2026-04-14 21:23:52
522
原创 门牌制作 数学 思维
摘要 本文计算了制作1到2020号门牌所需的数字"2"的总数。通过分位数统计法:个位贡献202次(每10个数字1次),十位201次(每100个数字10次,额外1次),百位200次(每1000个数字100次),千位21次(2000-2020)。总和为624个数字"2"。该方法高效解决了大规模数字统计问题。
2026-04-13 19:20:38
501
原创 约瑟夫环 数学
本文分析了约瑟夫环问题,给出了高效的递推解法。问题描述为:n个人围成一圈,从1开始报数,数到k的人出局,最后剩下的人编号是多少。通过数学推导,得出递推公式f(i)=(f(i-1)+k-1)%i+1,其中f(i)表示i个人时的幸存者编号。基于此公式,代码实现从2到n迭代计算,时间复杂度O(n),空间复杂度O(1)。该方法避免了模拟过程,适用于大规模数据(n,k<10^7)。示例输入n=10,k=3时,输出结果为4。
2026-04-13 14:59:10
592
1
原创 九宫重排 BFS
本文介绍了一个九宫重排问题,要求计算从初始状态到目标状态的最少移动步数。问题被转化为图的最短路径搜索,使用BFS算法解决。代码实现中,每个状态被表示为字符串,通过交换空格与相邻数字生成新状态,并用哈希集合记录已访问状态。边界检查确保移动有效性,最终返回最少步数或-1表示无解。样例输入输出展示了算法正确性。
2026-04-11 15:48:51
216
原创 日期问题 模拟
题目要求处理格式不统一的日期,如"AA/BB/CC"可能有三种解释方式:年/月/日、月/日/年或日/月/年。年份需补全为1960-2059年间,其中60-99表示1960-1999,00-59表示2000-2059。代码通过三种可能的日期组合进行验证,检查其有效性后排序去重输出。关键点包括闰年判断、日期有效性验证以及年份补全逻辑。最终输出格式为"yyyy-MM-dd"并按时间顺序排列。该问题考察日期处理和边界条件判断能力。
2026-04-10 11:26:57
392
原创 摆动序列 DP
题目要求计算长度为m、每个数在1到n之间的摆动序列的个数。摆动序列定义为奇数项比前一项大,偶数项比前一项小。使用动态规划方法,定义dp[i][j]表示长度为i+1、末尾为j的摆动序列数。状态转移方程根据i的奇偶性分别处理:奇数项时累加前缀和,偶数项时累加后缀和。最终答案为所有可能末尾数字的方案数之和模10000。例如,输入m=3,n=4时输出14。
2026-04-10 10:39:44
650
原创 substr erase unique
本文介绍了C++中迭代器、substr、erase和unique四个关键概念。迭代器提供统一访问容器元素的方式,substr用于提取字符串子串,erase删除容器元素,unique去除相邻重复项。文章重点解析了各函数的使用方法、注意事项及迭代器失效问题,并通过综合示例展示了如何结合这些功能进行字符串处理。这些基础操作在C++编程中具有广泛应用,理解其特性对编写高效、安全的代码至关重要。
2026-04-09 16:20:54
274
原创 路径之谜 DFS
本文解决了一个骑士在城堡中寻找唯一行走路径的问题。题目给定n×n方格和北墙、西墙箭靶上的箭数,要求找到从西北角到东南角的路径,使得经过每个方格时向正北和正西射箭的数量与给定箭靶数字一致。采用深度优先搜索(DFS)算法,通过维护箭靶计数和访问标记数组来剪枝,确保路径唯一且满足约束条件。代码实现了方向移动、路径记录和回溯处理,最终输出符合要求的路径编号序列。该方法高效地解决了路径搜索问题,适用于n≤20的规模。
2026-04-09 15:47:56
480
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅