为什么就过了俩,佬佬救救

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

naseele @ 2023-12-13 15:52:37

Subtask #0 和Subtask #1分别过了一个评测点,其他都是紫色


#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,q;//柜子个数和询问次数
    scanf("%d %d",&n,&q);
    int function_select = 0;
    vector<vector<int>>cabinet(n);//初始化n行,具体多少列到时候再分配
    auto it_b = cabinet.begin();
    auto it_eachrow_b = it_b->begin();
    int i,j,k;
    while(q--)
    {
        scanf("%d",&function_select);
        switch (function_select)
        {
        case 1:
            scanf("%d %d %d",&i,&j,&k);
            //此行未分配空间或此行空间少于j个
            if(cabinet[i-1].size() == 0||cabinet[i-1].size() < j)
            {
                cabinet[i-1].resize(j);
            }
            if (k != 0)
            {
                //cabinet[i-1].resize(j);
                cabinet[i-1][j-1] = k;
            }
            else if(cabinet[i-1].size() >= j)
            {
                cabinet[i-1].erase(it_eachrow_b + j-1);
            }
            break;

        default:
            scanf("%d %d",&i,&j);
            if(cabinet[i-1].size() == 0||cabinet[i-1].size() < j)
            {
                continue;
            }
            else
            {
                cout << cabinet[i-1][j-1] << endl;  
            }

            break;
        }
    }
    return 0;
}

by luoguandy @ 2023-12-13 16:42:50

《都是紫色》


by szlh_XJS @ 2024-02-14 14:25:51

试试我的,和你的想法差不多

#include<bits/stdc++.h>
using namespace std;
int n,q;
int main()
{
    cin>>n>>q;
    vector<map<int,int > >nn(n+1);
    int a,b,c,d;
    for(int i=1;i<=q;i++)
    {
        cin>>a;
        if(a==1)
        {
            cin>>b>>c>>d;
            nn[b][c]=d;
        }
        else
        {
            cin>>b>>c;
            cout<<nn[b][c]<<endl;
        }
    }
    return 0;
}

@naseele


|