CE:Compile Easily,轻松通过编译

P1255 数楼梯

zty_luogu @ 2021-08-03 19:49:13

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int f[5002][1020]={{},{0,1},{0,2}};
int arrlen(int a[]){
    int i=0;
    while(a[i]!=0) i++;
    return i;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    int len=1;
    cin>>n;
    if(n==0)
    {
        cout<<0;
        return 0;
    }
    for(int i=3;i<=n;i++)
    {
        for(int j=1;j<=len;j++)
        {
            f[i][j]=f[i-1][j]+f[i-2][j];
        }
        for(int j=1;j<=len;j++)
        {
            if(f[i][j]>=10)
                f[i][j+1]+=f[i][j]/10,f[i][j]%=10;
        }
        if(f[i][len+1]>0)len++;
    }
    for(int i=len;i>=1;i--)
        cout<<f[n][i];
    return 0;
}

CE了为什么,求助


by L107 @ 2021-09-11 20:53:11

这道题其实不用拷贝数据,直接mod运算就可以了。 具体操作见下

#include<bits/stdc++.h>
using namespace std;
int a[3][5003],n;
int main()
{
    a[0][0]=1;
    a[1][0]=1;
    cin>>n;
    if(n==0)
    {
        cout<<0;
        return 0;
    }
    if(n==1)
    {
        cout<<1;
        return 0;
    }
    int i,j,sw=1,val,add=0,lastAdd;
    for(i=0;i<=n-2;i++)
    {
        add=0;
        lastAdd = 0; 
        for(j=0;j<=sw;j++)
        {
            if(j==sw&&add==0) break;

            val=a[ i%3 ][j]+a[ (i+1)%3 ][j]+add;
            a[ (i+2)%3 ][j]=val%10;
            if(val>9) add=1;
            else add=0;

            if(j==sw-1&&add==1) 
                lastAdd = 1;        

        }
        if (lastAdd==1 ) sw++; 
    }
    for(j=sw-1;j>=0;j--) 
        cout<<a[(i+1)%3][j];

    return 0;
}

上一页 |