为什么上下两个代码一个错一个对的,错的错在哪?

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

XZIT20210907149 @ 2022-03-29 15:17:37

这是对的

#include<bits/stdc++.h>
using namespace std;
#define max 100005
struct locker{
        vector<int> num,k;
        int s;
    }locker1[max];
int main() 
{
    int n,q;
    cin>>n>>q;
    int a,i,j,k;
    for(int h=0;h<q;h++){
        cin>>a;
        if(a==1){
            cin>>i>>j>>k;
            locker1[i].s++;
            locker1[i].num.push_back(j);
            locker1[i].k.push_back(k);
        }
        else{
            cin>>i>>j;
            for(int h=locker1[i].s-1;h>=0;h--){
                if(locker1[i].num[h]==j){
                    cout<<locker1[i].k[h]<<endl;
                    break;
                }
            }

        }
    }
}

这是错的

#include<bits/stdc++.h>
using namespace std;
#define max 100005
struct locker{
        vector<int> num,k;
    }locker1[max];
int main() 
{
    int n,q;
    cin>>n>>q;
    int a,i,j,k;
    for(int h=0;h<q;h++){
        cin>>a;
        if(a==1){
            cin>>i>>j>>k;
            locker1[i].num.push_back(j);
            locker1[i].k.push_back(k);
        }
        else{
            cin>>i>>j;
            for(int h=0;h<q;h++){
                if(locker1[i].num[h]==j){
                    cout<<locker1[i].k[h]<<endl;
                    break;
                }
            }

        }
    }
}

by jiangtaizhe001 @ 2022-03-29 15:29:49

你已经是一个成熟的 OIer 了,你要学会如何肉眼来分辨两篇代码的细微区别(尽管这两篇代码的区别不是非常细微)


by lanretE @ 2022-03-29 15:45:01

@XZIT20210907149 因为后面的元素可能与之前重复,说明该柜子的某个格子存放的物品有更新。

所以必须从后往前循环


|