weixin_50947427 2021-12-25 23:36 采纳率: 66.7%
浏览 182
已结题

开long long数组不行是不是内存不够?

问题遇到的现象和发生背景

今天发现开这么大的数组不行 long long num[1000000][1000000],L[1000000];编译错误;但是我新建了一个源文件试一下开更大的数组long long num[100000000][100000000],L[100000000];可以运行。请问为什么会这样?这是咋回事啊??以及用vector<vector> num;是可以的。题目网址,有兴趣的可以看看:https://atcoder.jp/contests/abc233/tasks/abc233_c

问题相关代码,请勿粘贴截图

代码1可以正常运行:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(i, a, b) for (int i = a; i < b; i++)
const int MAX=10010;
int s[100];
int main(){
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
    ll b[100000000][100000000],L[100000000];
    b[0][0]=1000101010;
    cout<<b[0][0]<<endl;
    return 0;
}

代码2使用stl:

#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
using namespace std;
#define rep(i, a, b) for (int i = a; i < b; i++)
#define per(i, a, n) for (int i = n - 1; i >= a; i--)
#define ll long long
#define MAX 100005
vector<vector<ll>> num;
ll N,X,cnt=0,cop,L;
void sol(ll col){
    rep(i,0,num[col].size()){
        if(cop%num[col][i]==0){
            cop/=num[col][i];
            if(col==N-1&&cop==1){
                cnt++;
            }
            else if(col!=N-1){
                sol(col+1);
            }
            cop*=num[col][i];
        }
    }
}
int main() { 
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
    cin>>N>>X;
    num.resize(N);
    cop=X;
    rep(i,0,N){
        cin>>L;
        num[i].resize(L);
        rep(j,0,L){
            cin>>num[i][j];
        }
    }
    sol(0);
    cout<<cnt<<endl;
}

代码3编译错误的代码:

#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
using namespace std;
#define rep(i, a, b) for (int i = a; i < b; i++)
#define per(i, a, n) for (int i = n - 1; i >= a; i--)
#define ll long long
#define MAX 100005
ll num[1000000][1000000],L[1000000];
ll N,X,cnt=0,cop;
void sol(ll col){
    //cout<<cnt<<'*'<<endl;
    rep(i,0,L[col]){
        if(cop%num[col][i]==0){
            cop/=num[col][i];
            if(col==N-1&&cop==1){
                cnt++;
            }
            else if(col!=N-1){
                sol(col+1);
            }
            cop*=num[col][i];
        }
    }
}
int main() { 
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
    cin>>N>>X;
    cop=X;
    rep(i,0,N){
        cin>>L[i];
        rep(j,0,L[i]){
            cin>>num[i][j];
        }
    }
    sol(0);
    cout<<cnt<<endl;
}

运行结果及报错内容

Error: value of 00000746a5a29223 too large for field of 4 bytes at 0000000000000003
Error: value of 00000746a5a29327 too large for field of 4 bytes at 0000000000000107

我的解答思路和尝试过的方法
我想要达到的结果

em.为啥代码1代码2可以正常运行代码3却不行?

  • 写回答

1条回答 默认 最新

  • fuill 2021-12-26 00:26
    关注

    因为全局变量和非全局变量申请的内存方式不同,第三个数组是全局变量

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

    报告相同问题?

    问题事件

    • 系统已结题 1月3日
    • 已采纳回答 12月26日
    • 创建了问题 12月25日

    悬赏问题

    • ¥40 找同学帮敲Python代码
    • ¥15 MYSQL 订单的商品明细重复计算问题
    • ¥15 微信实时共享位置修改
    • ¥100 TG的session协议号转成直登号号后客户端登录几分钟后自动退出设备
    • ¥50 共模反馈回路的小信号增益
    • ¥15 arduino ssd1306函数与tone函数放歌代码不兼容问题
    • ¥70 0.96版本hbase的row_key里含有双引号,无法deleteall
    • ¥40 Ida Pro增加插件出现问题
    • ¥15 诊断性META分析合并效能的检验
    • ¥15 请问abb根据色块判断奇偶数并根据批次号放入仓储