随笔分类 - STL
摘要:代码1注释与解题思路 解题思路 这段代码使用了一个动态维护的有序数组来求解中位数。对于每个新输入的数字,使用二分查找将其插入到正确的位置以保持数组有序。当处理到奇数个元素时,直接输出数组中间位置的元素作为中位数。 代码注释 #include<bits/stdc++.h> using namespac
阅读全文
摘要:解题思路 本题需要模拟舞蹈课上学生配对跳舞的过程,关键点在于: 异性相邻配对:只有相邻的男生('B')和女生('G')才能配对 最小差值优先:优先选择舞蹈技术差值最小的一对 左边优先:当有多对差值相同时,选择最左边的一对 动态更新:每次配对后,队伍会合并,需要动态维护新的相邻关系 算法选择 使用优先
阅读全文
摘要:题目理解 P3378 【模板】堆 是一道 堆(优先队列) 的模板题,要求实现以下三种操作: 插入操作:将给定整数 x 加入数列。 查询操作:输出当前数列中的最小值。 删除操作:删除数列中的最小值(若有多个相同最小值,只删除一个)。 解题思路 数据结构选择 使用 小根堆(Min-Heap) 来维护数列
阅读全文
摘要:解题思路 暴力解法的缺陷 直接计算所有N²个和然后排序的时间复杂度是O(N²logN),对于N=1e5的情况显然不可行。 优化思路 利用序列单调性:由于A和B都是单调不降的,可以避免不必要的计算 优先队列维护:使用大根堆来维护当前找到的最小的N个和 剪枝策略:当发现当前计算的和已经大于堆顶元素时,可
阅读全文
摘要:题目理解 P1090 [NOIP 2004 提高组] 合并果子 是一道经典的 贪心算法 题目,要求将若干堆果子合并成一堆,每次合并消耗的体力等于两堆果子的重量之和,目标是找到 最小的总体力消耗。 解题思路 贪心策略 每次选择 当前最小的两堆果子 合并,可以保证每次合并的体力消耗最小,从而使得总体力消
阅读全文
摘要:题目理解 P3887 [GDOI2014] 世界杯 是一道 贪心算法 题目,要求为多个足球阵型选择最优球员组合,使得每个阵型的 平均综合水平最高。关键点在于: 球员分类:守门员、后卫、中场、前锋。 阵型定义:如 4-5-1 表示 4 后卫、5 中场、1 前锋(守门员固定 1 人)。 选择策略:按阵型
阅读全文
摘要:约瑟夫问题解法 解法一:STL队列实现 #include <iostream> #include <queue> using namespace std; int main() { int n, m; cin >> n >> m; queue<int> q; // 初始化队列,将所有人按顺序加入队列
阅读全文
摘要:#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]:
阅读全文
摘要:P5661 [CSP-J2019] 公交换乘 解题分析与代码注释 解题思路 这道题目需要模拟公交和地铁的换乘优惠规则,主要考察对队列的应用和优惠券管理的能力。以下是解题的关键点: 数据结构选择:使用数组模拟队列来存储优惠券信息。虽然STL的queue更简单,但本题需要频繁遍历队列中的元素(检查可用优
阅读全文
摘要:P1540 [NOIP 2010 提高组] 机器翻译 解题思路与代码注释 解题思路 这道题目考察的是队列和缓存替换算法的应用,具体实现的是FIFO(先进先出)的缓存替换策略。 核心思路 使用一个队列来维护当前内存中的单词,队列长度不超过内存容量M 使用一个标记数组vis来记录单词是否在内存中 对于每
阅读全文
摘要:B3616 【模板】队列 解题思路与代码注释 解题思路 队列是一种先进先出(FIFO)的数据结构,本题要求实现队列的四个基本操作: push(x) - 将元素x加入队列尾部 pop() - 移除队列头部元素 query() - 查询队列头部元素 size() - 查询队列当前元素数量 有两种常见的实
阅读全文
摘要:解题思路 问题分析: 我们需要处理三种操作:授予特定页面权限、授予所有页面权限、查询权限状态 关键在于高效记录每个用户的权限状态,并快速响应查询 数据结构选择: 使用vis数组标记用户是否有全部权限(操作2) 使用set数组s记录每个用户拥有的特定页面权限(操作1) set提供了O(log n)的查
阅读全文
摘要:描述 给定n个整数,现在每次能改动一个整数,问最少需要多少次改动才能将它们改成全部相同。 输入 第一行为正整数n(n<=1000000)。 第二行为n个整数(绝对值不超过109)。 输出 输出最少改动的次数。 样例输入 51 2 1 2 5 样例输出 3 map大法好呀 #include<bits/
阅读全文
摘要:描述 使用STL中的search函数,判断一个序列是否是另一个序列的子序列。 部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码。 C++ int main() { vector<int> vec1, vec2; int n, m, a; cin>>n>>m; while(n--) { ci
阅读全文
摘要:描述 使用STL中的multimap记录用户的所有电话号码,yuyu想查询用户有多少个电话号码,crq则想查询时输出所有的号码。 部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码。 C++ int main() { multimap<string, string> sm; string n
阅读全文
摘要:描述 小明在一次聚会中,不慎遗失了自己的钱包,在接下来的日子,面对小明的将是一系列的补卡手续和堆积的账单… 在小明的百般恳求下,老板最终同意延缓账单的支付时间。可老板又提出,必须从目前还没有支付的所有账单中选出面额最大和最小的两张,并把他们付清。还没有支付的账单会被保留到下一天。 请你帮他计算出支付
阅读全文
摘要:定义: 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。 头文件: #include <queue> 运算符重载: fr
阅读全文
摘要:描述 奶牛以非传统的方式玩孩子的跳房子游戏。奶牛不是要跳入一组线性编号的框,而是创建一个平行于 x 和 y 轴的 5x5 直线数字网格。然后他们熟练地跳到网格中的任何数字上,并向前、向后、向右或向左(从不斜向)跳到网格中的另一个数字。他们再次(相同的规则)跳到一个数字(可能是一个已经访问过的数字)。
阅读全文
摘要:期末要到了,小A却没学会多少OpenGL,为了期末作业,于是他决定做一款很简单的游戏,这个游戏我们都玩过,名字就叫“记忆翻牌”。所谓“记忆翻牌”就是给定N行M列的牌,开牌时会全部面朝上让玩家记忆若干秒之后封排(牌面朝下),玩家需要不断从中找2个一样的消除掉,如果不一样则再次找两个,直到全部消完为止。
阅读全文
摘要:描述 使用STL中的next_permutation函数输出一个序列的全排列。 部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码。 C++ int main() { vector<int> vec; int n, x; cin>>n; while(n--) { cin>>x; vec.pu
阅读全文

浙公网安备 33010602011771号