洛谷 P3613 【深基15.例2】寄包柜
【题目链接】
洛谷 P3613 【深基15.例2】寄包柜
【题目考点】
1. STL map
2. STL pair
pair<T1, T2> make_pair(T1 a, T2 b);
make_pair函数可以将两个量组合成一个pair类型的对象。
【解题思路】
共有 1 0 5 10^5 105个寄包柜,每个寄包柜最多有 1 0 5 10^5 105格子。
如果每个格子都用一个int类型的变量表示,那么需要声明int a[100000][100000]
,共 1 0 10 10^{10} 1010个int类型的变量。内存限制128M,最多保存 128 ∗ 1024 ∗ 1024 / 4 ≈ 3 ∗ 1 0 7 128*1024*1024/4\approx 3*10^7 128∗1024∗1024/4≈3∗107个int类型的变量,一定会内存超限。
由于超市中的寄包格子总数不会超过 1 0 7 10^7 107,如果我们可以为每个可能的寄包格子设一个int类型的变量来保存该格子中的物品,这就是可行的。
这里需要用到表示映射的STL map。
解法1:每个柜子是一个map对象,使用map数组
我们可以为每个寄包柜设一个map对象,map中的键为格子编号,值为物品。
设map数组map<int, int> locker[100005]
, locker[i]
表示第i个寄包柜,locker[i][j]
表示第i个寄包柜第j个格子中的物品。
由于数据量达到 1 0 5 10^5 105,在主函数内声明会栈溢出,需要将locker声明成全局变量。
解法2:将柜子与格子编号组合成pair对象作为键
由于给定柜子、格子编号后,就能唯一确定一个位置,因此可以将柜子与格子编号合成一个pair类的对象,以这个pair对象作为键,值是物品。这样只需要声明一个map对象:map<pair<int, int>, int> mp;
mp[make_pair(i, j)]
为第i个柜子第j个格子中的物品。
【题解代码】
解法1:每个柜子是一个map对象,使用map数组
#include <bits/stdc++.h>
using namespace std;
#define N 100005
map<int, int> locker[N];//locker[i]:第i个寄包柜,locker[i][j]:第i个寄包柜第j个格子中的物品。
int main()
{int n, q, t, i, j, k;cin >> n >> q;while(q--){cin >> t;if(t == 1){cin >> i >> j >> k;locker[i][j] = k;}else//t == 2 {cin >> i >> j;cout << locker[i][j] << endl;}}return 0;
}
解法2:将柜子与格子编号组合成pair对象作为键
#include <bits/stdc++.h>
using namespace std;
int main()
{map<pair<int, int>, int> mp;int n, q, num, i, j, k;cin >> n >> q;while(q--){cin >> num;if(num == 1){cin >> i >> j >> k;mp[make_pair(i, j)] = k;}else{cin >> i >> j;cout << mp[make_pair(i, j)] << endl;}}return 0;
}
洛谷 P3613 【深基15.例2】寄包柜相关推荐
- 数组——寄包柜(洛谷 P3613)
题目选自洛谷P3613 比入门稍微麻烦了一点,该题主要为了理解用vector如何创建二维数组及其引用对应的值. 解题代码: #include<stdio.h> #include<io ...
- P3156 【深基15.例1】询问学号(20分)--python3实现
[深基15.例1]询问学号 - 洛谷 """P3156 [深基15.例1]询问学号(20分)--python3实现 https://www.luogu.com.cn/pr ...
- 深入理解 操作系统 LRU算法(以洛谷P1540题为例)
LRU算法 LeastRecentlyUsedLeast Recently UsedLeastRecentlyUsed 算法,意为"最近最少使用",这是操作系统内存管理部分重要的一 ...
- 深入理解 操作系统 SJF算法(以洛谷P1223题为例)
CPU Scheduling Algorithms 重要的CPU调度算法如下: FCFS Scheduling(First-Come, First-Served) SJF Scheduling(Sho ...
- 洛谷P3613 寄包柜
题目描述 超市里有 n(n\le10^5)n(n≤105) 个寄包柜.每个寄包柜格子数量不一,第 ii 个寄包柜有 a_i(a_i\le10^5)ai(ai≤105) 个格子,不过我们并不知道各个 ...
- 洛谷P3613 睡觉困难综合征
传送门 题解 人生第一道由乃-- 做这题之前应该先去把这一题给切掉->这里 我的题解->这里 然后先膜一波zsy大佬和flashhu大佬 大体思路就是先吧全0和全1的都跑答案,然后按位贪心 ...
- 【刷题】洛谷 P3613 睡觉困难综合征
题目背景 刚立完Flag我就挂了WC和THUWC... 时间限制0.5s,空间限制128MB 因为Claris大佬帮助一周目由乃通过了Deus的题,所以一周目的由乃前往二周目世界找雪辉去了 由于二周目 ...
- p5727深基5.例3冰雹猜想c语言,深基
欸嘿,典型的求解第k小的数的问题 算法中使用了快速排序 关键之处在于原本快排需要两边都进行排序,但现在我们只关心第k小的数,所以,如果在ll比k大那么就排左半边,比k小就比右半边,从而实现时间复杂度的 ...
- 洛谷【数据结构1-1】线性表
P3156 [深基15.例1]询问学号 传送门 题目描述 有 n(n≤2×1^6) 名同学陆陆续续进入教室.我们知道每名同学的学号(在 1 到 10^9之间),按进教室的顺序给出.上课了,老师想知道第 ...
最新文章
- 通过Dockerfile构建Docker镜像
- js如何关闭当前页,而不弹出提示框
- CentOS7 安装和配置 mysql5.7
- JVM 类加载机制:编译器常量与初始化
- [TPYBoard - Micropython之会python就能做硬件 2] 利用micropython控制NOKIA 5110屏
- 一道百度前端线上笔试题
- mysql操作xml字段_SQL XML 字段操作
- Newtonsoft 六个超简单又实用的特性,值得一试 【下篇】
- 使用ucontext组件实现的coroutine代码分析
- 脚本命令配置mysql_MySQL常用的配置、脚本和命令
- Set的5种遍历方式
- Debian/Ubuntu Apache Mod_Rewrite 安装
- ARMv8-A Exception Levels
- 怎么写c++ documentation_球鞋鞋标怎么看真假、有几种 耐克鞋标鉴定方法推荐
- 三、实战小例程 基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方
- 吃鸡显示连接服务器超时,吃鸡 怎么显示连接超时 | 手游网游页游攻略大全
- Java开发人员幽默外号,好听的外号绰号 好听幽默绰号大全
- java qua_Qua Vadis Eclipse? 第二部分
- Apache 安装详解
- (续)SSM整合之springmvc笔记(@RequestMapping注解)(P124-130)