为什么第一个过不了就80????

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

leiyuhan @ 2024-09-14 08:58:28

#include<iostream>  
#include<vector>  
using namespace std;

struct GE {
    int data;
};

struct GZ {
    vector<GE> gezi; // 使用 vector 替代 GE*  
    // vector  size()  
};

struct shop {
    vector<GZ> find; // 使用 vector 替代 GZ*  
};

int main() {
    int n, q;
    cin >> n >> q;
    shop p;
    vector<int> result;

    // 初始化柜子,每个柜子开始时没有格子  
    p.find.resize(n);

    int a, b;
    int ok;
    for (int i = 0; i < q; i++) {
        cin >> ok;
        if (ok == 1) { // 存入  
            cin >> a >> b;

            // 如果格子数量不够,需要扩展  
            if (p.find[a].gezi.size() <= b) {
                p.find[a].gezi.resize(b + 1); // 扩展到至少b+1个格子  
            }
            cin >> p.find[a].gezi[b].data;//输入物品 
        }
        if (ok == 2) { // 询问  
            cin >> a >> b;
            if (a < n && b < p.find[a].gezi.size()) { // 确保索引在有效范围内  
                result.push_back(p.find[a].gezi[b].data); // 存起来  
            }
        }
    }

    // 输出 vector  
    for (int k : result) {
        cout << k << endl;
    }
  //不需要delete

    return 0;
}

by chengzg @ 2024-10-03 21:33:15

不用这么麻烦吧……


by chengzg @ 2024-10-03 21:34:04


#include<bits/stdc++.h>
using namespace std;

long long n,q,t,i,j,k;
vector<vector<int> > v;

int main()
{
    cin>>n>>q;
    v.resize(n+1);
    while(q--)
    {
        cin>>t;
        if(t==1)
        {
            cin>>i>>j>>k;
            if(v[i].size()<j+1) v[i].resize(j+1);
            v[i][j]=k;
        }
        else
        {
            cin>>i>>j;
            cout<<v[i][j]<<endl;
        }
    }
    return 0;
}

by chengzg @ 2024-10-03 21:35:13

代码很简单应该能看懂,毕竟都是学过vector的人,求关


by Z09103839 @ 2024-10-05 22:17:11

resize(n+1)因为下标从零开始


by caojinyu0518 @ 2024-10-07 21:08:52

@chengzg 也可以用map


by chengzg @ 2024-10-07 21:28:48

@caojinyu0518 对的


|