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

开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日

悬赏问题

  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址
  • ¥15 elmos524.33 eeprom的读写问题
  • ¥15 使用Java milo连接Kepserver服务端报错?
  • ¥15 用ADS设计一款的射频功率放大器
  • ¥15 怎么求交点连线的理论解?
  • ¥20 软件开发方法学习来了
  • ¥15 微信小程序商城如何实现多商户收款 平台分润抽成
  • ¥15 HC32L176调试了一个通过TIMER5+DMA驱动WS2812B
  • ¥15 关于自相关函数法和周期图法实现对随机信号的功率谱估计的matlab程序运行的问题,请各位专家解答!