1 条题解

  • 0
    @ 2026-8-19 17:28:19

    题目分析

    第一眼:上楼梯改版谁不会啊,看我直接用数组记
    接着看:不怼!出题人把范围设成3×1083\times10^8了,数组空间炸了,肿么办呢?

    这个时候我们回想一下下楼梯的推理过程,第三级楼梯的答案由第二级和第一级的答案相加得到,而第四级又由第二级和第三级答案累加得到.
    聪明的你会发现:好像求第ii级台阶的答案aia_i时只用到了ai1ai2a_{i-1}、a_{i-2}得到,其余的ai3a_{i-3}~a1a_1数直接没用了!
    类比到这题会发现:ai=ai1+ai2+ai3a_i=a_{i-1}+a_{i-2}+a_{i-3},我们只用这四个数就可以一直往后推了,空间问题解决了,我们成功将一个冗长数组变成了四个变量!

    注意

    1. 本题考验代码习惯,必须用const常量来定义模数
    2. 既然是亮亮学长了,那都LL你还不开long long?

    Code

    #include<bits/stdc++.h>
    #define int long long  //十年OI一场空,___________
    using namespace std;
    const int mod=1e10+7;  //const定义模数
    int n;
    int a=0,b=0,c=0,d=1;
    signed main()
    {
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		a=b;b=c;c=d;  //滚动求答案
            d=(a+b+c)%mod;	
    	}
    	cout<<d%mod;  //随时取模,养成好习惯
    	return 0;
    }
    
    • 1

    信息

    ID
    1053
    提交时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    320
    已通过
    10
    上传者