1.2 寄包柜问题
分析:由题目可知,不仅柜子的编号是离散的,而且箱子的数目和编号还不确定,如果都以开辟数组的形式实现,将会耗费大量空间。因此,(自行脑补每个柜子的情况)其实是一个稀疏的存储模型。对于该题,我们可以有使用vector不定长数组
或者map来实现,或者更好的情况下,利用一下数组自身的压缩能力实现。
解决方法一:vector不定长数组
分析:通过建立cabin(柜子结构体)并在其中建立了box和obj两个vector数组模拟了分散的空间(当然这样的结构似乎不够严谨)不过处于方便我们仍然用这种方式来表示
#include<iostream>
#include<vector>
using namespace std;
class cabinet{
public:
vector<int> box;//box的箱子号
vector<int> obj;//box里的物品
int record_end;//平常的话最好还是用这个比较好
int search(int x){
for(vector<int>::iterator i=box.end(),j=obj.end();i!=box.begin()-1;i--,j--){
if(*i==x) return *j;
}
}
};
cabinet cabin[100005];
int main()
{
int n,q;
cin>>n>>q;//n个柜子和q次操作
int op;
int i,j;//i柜子的j号柜子
int ob;//物品
while(q>0){
cin>>op;
cin>>i>>j;
if(op==1){
cin>>ob;//放入物品
cabin[i].box.push_back(j);
cabin[i].obj.push_back(ob);
}
else {
ob=cabin[i].