【题目链接】
【题目考点】
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个格子中的物品。
【题解代码】
解法1:STL 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;
}