洛谷 P3613 【深基15.例2】寄包柜

【题目链接】

洛谷 P3613 【深基15.例2】寄包柜

【题目考点】

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 12810241024/43107个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;
}

猜你喜欢

转载自blog.csdn.net/lq1990717/article/details/128652179