一个关于vector数组的问题,求大佬指教!!

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

xdedb @ 2024-01-13 14:28:19

这道题主要是我发现改了一点点我就对了,但是我不知道为什么这么改,感觉是关于vector数组有关系的 先附上我的代码,全re

#include <iostream>
#include <vector>
using namespace std;
int main(){
    int n,m;
    cin>>n>>m;
    vector<vector<int>> gui(n+1);
    for(int i=0;i<m;i++){
        int num;
        cin>>num;
        if(num==1){
            int a,b,c;
            cin>>a>>b>>c;
            if(b>gui[a].size()-1){//但是这里改成b+1>gui[a].size()就是对的了
                gui[a].resize(b+1);
            }
            gui[a][b]=c;
        }else{
            int a,b;
            cin>>a>>b;
            cout<<gui[a][b]<<endl;
        }
    }
}

但是把第十四行右边的-1移到左边的+1就是全AC了 下面附上我的测评记录 全RE: 全AC: 然后我自己摸索一下就是全re是因为进入不了if语句求大佬指教一下!


by xdedb @ 2024-01-13 14:30:42

我发现测评记录好像没有发上来我补一下 re记录:https://www.luogu.com.cn/record/142676369 AC记录: https://www.luogu.com.cn/record/142675888


by Ew_Cors @ 2024-01-13 14:33:23

gui[a].size()-1

基本上所有的 STL 容器的 size 函数都会返回无符号整型。

如果你的 size 为 0,那么减 1 之后就自然溢出了,你接下来的 resize 就不会执行,下面的赋值语句就会 RE。


by xdedb @ 2024-01-13 14:38:27

@Ew_Cors 奥奥,原来如此,谢谢大佬!


|