随笔分类 -  队列

摘要:代码1注释与解题思路 解题思路 这段代码使用了一个动态维护的有序数组来求解中位数。对于每个新输入的数字,使用二分查找将其插入到正确的位置以保持数组有序。当处理到奇数个元素时,直接输出数组中间位置的元素作为中位数。 代码注释 #include<bits/stdc++.h> using namespac 阅读全文
posted @ 2025-06-13 15:06 CRt0729 阅读(64) 评论(0) 推荐(0)
摘要:解题思路 这道题要求将数字1围成的闭合圈内的所有0改为2。关键点在于如何区分闭合圈内外的0: 逆向思维:不直接找闭合圈内的0,而是找出所有与边界相连的0(这些0肯定在闭合圈外) 多源BFS:从所有边界上的0开始进行BFS,标记所有能到达的0 填色规则: 未被标记的0就是闭合圈内的0,需要改为2 标记 阅读全文
posted @ 2025-06-06 15:16 CRt0729 阅读(39) 评论(0) 推荐(0)
摘要:解题思路 这道题是一个典型的带时间限制的BFS问题,需要考虑流星坠落时间对路径选择的影响。关键点在于: 地图预处理:首先计算每个格子最早被流星摧毁的时间 安全区域判断:安全区域是指永远不会被流星摧毁的格子(即g[x][y] = ∞) BFS扩展条件:贝茜只能在到达某格子的时间早于该格子被摧毁的时间才 阅读全文
posted @ 2025-06-06 15:02 CRt0729 阅读(33) 评论(0) 推荐(0)
摘要:解题思路 这道题是一个典型的带传送门的迷宫最短路径问题,需要使用广度优先搜索(BFS)来解决。关键点在于正确处理传送门的逻辑: 地图表示:使用二维字符数组存储迷宫,包含起点'@'、终点'='、障碍'#'、草地'.'和传送门'A'-'Z' 传送门特性: 传送门是双向的,且强制传送(必须使用) 传送不消 阅读全文
posted @ 2025-06-06 14:37 CRt0729 阅读(79) 评论(0) 推荐(0)
摘要:解题思路 这道题是一个典型的二维矩阵中的最短路径问题,可以使用广度优先搜索(BFS)来解决。BFS非常适合解决这种无权图的最短路径问题,因为它会逐层扩展搜索,第一次到达目标点时经历的步数就是最短路径。 关键点: 矩阵表示:用二维字符数组g存储地图,包含起点'm'、终点'd'、障碍'#'和空地'.' 阅读全文
posted @ 2025-06-06 12:39 CRt0729 阅读(34) 评论(0) 推荐(0)
摘要:题目分析 这道题是一道典型的 BFS(广度优先搜索) 题目,要求计算从楼层 A 到楼层 B 的最少按键次数。电梯的移动规则是: 每次可以 向上或向下 移动 K_i 层(K_i 是当前楼层 i 的数字)。 如果移动后的楼层超出 1~N 的范围,则该方向不可行。 由于每次移动的代价相同(每次按键算一步) 阅读全文
posted @ 2025-06-04 20:13 CRt0729 阅读(138) 评论(0) 推荐(0)
摘要:题目分析 这是一道经典的 一维BFS(广度优先搜索) 题目,要求计算农夫(FJ)从起点 x 到终点 y 的最少步数,每次移动可以选择: 前进一步(x + 1) 后退一步(x - 1) 直接跳跃到 2 * x 的位置 由于每次移动的步数相同(每一步的代价都是 1),BFS 能够保证首次到达终点时的步数 阅读全文
posted @ 2025-06-04 19:51 CRt0729 阅读(23) 评论(0) 推荐(0)
摘要:解题思路 本题需要模拟舞蹈课上学生配对跳舞的过程,关键点在于: 异性相邻配对:只有相邻的男生('B')和女生('G')才能配对 最小差值优先:优先选择舞蹈技术差值最小的一对 左边优先:当有多对差值相同时,选择最左边的一对 动态更新:每次配对后,队伍会合并,需要动态维护新的相邻关系 算法选择 使用优先 阅读全文
posted @ 2025-05-30 17:57 CRt0729 阅读(33) 评论(0) 推荐(0)
摘要:题目理解 P3378 【模板】堆 是一道 堆(优先队列) 的模板题,要求实现以下三种操作: 插入操作:将给定整数 x 加入数列。 查询操作:输出当前数列中的最小值。 删除操作:删除数列中的最小值(若有多个相同最小值,只删除一个)。 解题思路 数据结构选择 使用 小根堆(Min-Heap) 来维护数列 阅读全文
posted @ 2025-05-30 15:56 CRt0729 阅读(45) 评论(0) 推荐(0)
摘要:解题思路 暴力解法的缺陷 直接计算所有N²个和然后排序的时间复杂度是O(N²logN),对于N=1e5的情况显然不可行。 优化思路 利用序列单调性:由于A和B都是单调不降的,可以避免不必要的计算 优先队列维护:使用大根堆来维护当前找到的最小的N个和 剪枝策略:当发现当前计算的和已经大于堆顶元素时,可 阅读全文
posted @ 2025-05-30 15:52 CRt0729 阅读(62) 评论(0) 推荐(0)
摘要:题目理解 P1090 [NOIP 2004 提高组] 合并果子 是一道经典的 贪心算法 题目,要求将若干堆果子合并成一堆,每次合并消耗的体力等于两堆果子的重量之和,目标是找到 最小的总体力消耗。 解题思路 贪心策略 每次选择 当前最小的两堆果子 合并,可以保证每次合并的体力消耗最小,从而使得总体力消 阅读全文
posted @ 2025-05-30 15:42 CRt0729 阅读(162) 评论(0) 推荐(0)
摘要:题目理解 P3887 [GDOI2014] 世界杯 是一道 贪心算法 题目,要求为多个足球阵型选择最优球员组合,使得每个阵型的 平均综合水平最高。关键点在于: 球员分类:守门员、后卫、中场、前锋。 阵型定义:如 4-5-1 表示 4 后卫、5 中场、1 前锋(守门员固定 1 人)。 选择策略:按阵型 阅读全文
posted @ 2025-05-30 15:40 CRt0729 阅读(39) 评论(0) 推荐(0)
摘要:约瑟夫问题解法 解法一:STL队列实现 #include <iostream> #include <queue> using namespace std; int main() { int n, m; cin >> n >> m; queue<int> q; // 初始化队列,将所有人按顺序加入队列 阅读全文
posted @ 2025-05-27 16:20 CRt0729 阅读(45) 评论(0) 推荐(0)
摘要:#include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; struct node{ int x,t; //x国籍,t到港时间 }; queue<node> q; //结构体队列 int vis[N]; //vis[i]: 阅读全文
posted @ 2025-05-27 16:08 CRt0729 阅读(51) 评论(0) 推荐(0)
摘要:P5661 [CSP-J2019] 公交换乘 解题分析与代码注释 解题思路 这道题目需要模拟公交和地铁的换乘优惠规则,主要考察对队列的应用和优惠券管理的能力。以下是解题的关键点: 数据结构选择:使用数组模拟队列来存储优惠券信息。虽然STL的queue更简单,但本题需要频繁遍历队列中的元素(检查可用优 阅读全文
posted @ 2025-05-27 16:04 CRt0729 阅读(186) 评论(0) 推荐(0)
摘要:P1540 [NOIP 2010 提高组] 机器翻译 解题思路与代码注释 解题思路 这道题目考察的是队列和缓存替换算法的应用,具体实现的是FIFO(先进先出)的缓存替换策略。 核心思路 使用一个队列来维护当前内存中的单词,队列长度不超过内存容量M 使用一个标记数组vis来记录单词是否在内存中 对于每 阅读全文
posted @ 2025-05-27 15:58 CRt0729 阅读(71) 评论(0) 推荐(0)
摘要:B3616 【模板】队列 解题思路与代码注释 解题思路 队列是一种先进先出(FIFO)的数据结构,本题要求实现队列的四个基本操作: push(x) - 将元素x加入队列尾部 pop() - 移除队列头部元素 query() - 查询队列头部元素 size() - 查询队列当前元素数量 有两种常见的实 阅读全文
posted @ 2025-05-27 15:50 CRt0729 阅读(93) 评论(0) 推荐(0)
摘要:#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5+10,inf = 0x3f3f3f3f; struct node{ int t,p,f; }; node a[N]; int n, 阅读全文
posted @ 2024-10-16 21:17 CRt0729 阅读(38) 评论(0) 推荐(0)
摘要:思路解释 1. 数据结构选择: 使用 queue 来存储每艘船的到达时间和乘客国籍信息。 使用数组 a 来记录每个国籍的乘客数量。 2. 输入处理: 读取船只数量 n。 对于每艘船,读取其到达时间 t 和乘客数量 k,然后读取每个乘客的国籍 x。 3. 统计不同国籍的乘客数量: 如果某个国籍的乘客数 阅读全文
posted @ 2024-09-30 18:03 CRt0729 阅读(46) 评论(0) 推荐(0)
摘要:解决思路 广度优先搜索 (BFS):使用 BFS 从起点 x 开始搜索,找到到达终点 y 的最短路径。 队列:使用队列存储当前节点和步数。 访问标记:使用数组 vis 标记节点是否被访问过,防止重复访问。 #include<bits/stdc++.h> #define ll long long us 阅读全文
posted @ 2024-09-30 17:53 CRt0729 阅读(73) 评论(0) 推荐(0)