洛谷 P3613 【深基15.例2】寄包柜
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
【题目链接】
【题目考点】
1. STL map
【解题思路】
共有
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。
我们可以为每个寄包柜设一个map对象map中的键为格子编号值为物品。
设map数组map<int, int> locker[100005]
locker[i]
表示第i个寄包柜locker[i][j]
表示第i个寄包柜第j个格子中的物品。
【题解代码】
解法1STL 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;
}