求助大佬,这题为什么在洛谷上编译不成功?

P1255 数楼梯

probable__ @ 2023-11-22 16:42:01

代码如下:

#include<bits/stdc++.h>
using namespace std;
char listt[5002][5002]={{},{'0','1'},{'0','2'}};
int leen[5002]={1,1,1},flag=0;
void gjd(int nn){
    leen[nn]=max(leen[nn-1],leen[nn-2]);
    flag=0;
    for(int i=1;i<=leen[nn];i++){
        listt[nn][i]=(listt[nn-1][i]-'0'+listt[nn-2][i]-'0'+flag)%10+'0';
        flag=(listt[nn-1][i]-'0'+listt[nn-2][i]-'0'+flag)/10;
    }
    if(flag) listt[nn][++leen[nn]]='1';
}
int main(){
    memset(listt,0x30,sizeof(listt));
    listt[1][1]='1';listt[2][1]='2';
    int n;
    cin>>n;
    for(int i=3;i<=n;i++) gjd(i);
    for(int i=leen[n];i>=1;i--) cout<<listt[n][i];
    return 0;
} 

这道题的代码在Dev上能够运行并且正确,但是在洛谷上编译不过去,在线求助大佬!\ 谢谢!!


by Bruce1230 @ 2023-11-22 16:45:19

@TLEMLE 你这代码没有问题啊!


by Terrible @ 2023-11-22 16:49:50

@TLEMLE

char listt[5002][5002]={{},{'0','1'},{'0','2'}};

编译后产生的可执行程序中每个元素都对应一个专门的初始化指令。

这样会导致编译后生成的可执行文件过大,超过洛谷编译程序结果的上限所以会编译失败。

对于大数组不应当使用赋初值的方式赋值,请在程序中使用专门的语句对特定元素赋值。

注:给全局数组赋值全零的情况会被优化,其他情况都会出现上面的情况。


by probable__ @ 2023-11-25 11:19:28

@Terrible 谢谢大佬!!!


|