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 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题