1. 程式人生 > 實用技巧 >【深基15.例2】寄包櫃

【深基15.例2】寄包櫃

題目連結https://www.luogu.com.cn/problem/P3613

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 const int MAX = 100005;
 5 struct node
 6 {
 7     //s用來記錄desk[i]的元素個數,表示第i個櫃子已存s次物品 
 8     //num表示第i個櫃子的第num個格子存入一個物品
 9     //w表示該格子存入的物品 
10     vector<int> num,w;//用vector動態陣列節省記憶體,以防MLE 
11 int s = 0; 12 } desk[MAX]; 13 int main() 14 { 15 int n,q; 16 cin>>n>>q; 17 while(q--) 18 { 19 int x,a,b,c; 20 cin>>x; 21 if(x == 1) 22 { 23 cin>>a>>b>>c; 24 desk[a].s++; //第a個櫃子存入物品 25 desk[a].num.push_back(b);//
第b個格子中 26 desk[a].w.push_back(c);//存入物品c 27 } 28 else 29 { 30 cin>>a>>b; 31 for(int i = desk[a].s - 1;i >= 0;i--)//從後往前,因為格子存放會有更新 32 { 33 if(desk[a].num[i] == b)//如果查詢到該櫃子的格子 34 { 35 cout<<desk[a].w[i]<<endl;//
輸出該格子內的物品 36 break;//因此時是最新的存放情況,所以有解後需要直接退出查詢 37 } 38 } 39 } 40 } 41 return 0; 42 }