本地电脑过不了

P1255 数楼梯

MakerFly @ 2023-05-04 22:30:53

为什么本地爆内存,洛谷就可以运行得起来啊???

没参加过比赛,这是什么原理???


by N1ght_Star @ 2023-05-04 22:55:39

有没有可能你要把代码粘出来


by Ruiqun2009 @ 2023-05-04 23:15:57

@MakerFly Dev-C++ 默认栈大小 2MB,数组这么大当然爆栈。

实际上只需要开到 \lceil5000\log\varphi\rceil=1045 个十进制位。

或者使用 vector


by MakerFly @ 2023-05-05 12:50:52

@N1ght_Star qwq感谢提醒

#include<cstdio>
#include<cstring>
#include<math.h>
#include<algorithm>
#define maxn 1667
using namespace std;
struct Bigint
{
    int len,a[maxn];
    Bigint(int x=0)
    {
        memset(a,0,sizeof(a));
        for(len=1;x;len++)
            a[len]=x%10,x/=10;
        len--;
    }
    int &operator[](int i)
    {
        return a[i];
    }
    void flatten(int L)
    {
        len=L;
        for(int i=1;i<=len;++i)
            a[i+1]+=a[i]/10,a[i]%=10;
        for(;!a[len];)
        len--;
    }
    void print()
    {
        for(int i=max(len,1);i>=1;i--)
            printf("%d",a[i]);
    }
};
Bigint operator+(Bigint a,Bigint b)
{
    Bigint c;       
    int len=max(a.len,b.len);
    for(int i=1;i<=len;++i)
        c[i]+=a[i]+b[i];
    c.flatten(len+1);
    return c;
}

int main()
{
    int N;
    scanf("%d",&N);
    Bigint f[5001];
    f[1]=Bigint(1);
    f[2]=Bigint(2);
    for(int i=3;i<=N;i++)
        f[i]=f[i-2]+f[i-1];
    f[N].print();
    return 0;
}

by MakerFly @ 2023-05-05 13:00:13

@Ruiqun2009 感谢qwq,请问如果遇见大样例数据,是不是需要在一般自己测试时修改默认内存,或者有啥其他好方法呢?NOIP允许的此类操作有哪些?


by N1ght_Star @ 2023-05-07 13:12:58

@MakerFly 记得没错有一个修改栈大小的指令


by MakerFly @ 2023-05-07 14:16:33

@N1ght_Star 是的,

-Wl,-stack=134217728

在编译选项中调用qwq

感谢,现在知道怎么用了


|