_Felix @ 2018-10-10 20:24:21
数楼梯高精,结果我高精把内存搞爆炸了
#include<bits/stdc++.h>
using namespace std;
char a[100005],b[100005];
char h[100005];
char f[5005][100005];
int hhh(char str1[100005],char str2[100005])
{
long int len1,len2;
long int i,j,k;
int up;
len1 = strlen(str1);
len2 = strlen(str2);
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
for(i=len1-1,k=0;i>=0;i--)
{
a[k]=str1[i]-'0';
k++;
}
for (j=len2-1,k=0; j>=0;j--)
{
b[k]=str2[j]-'0';
k++;
}
//准备工作
for (i=0,up=0;i<1000;i++)
{
a[i]=a[i]+b[i]+up;
up=a[i]/10;
a[i]%=10;
}
for (i=1000-1;i>=0;i--)
{
if (a[i])
break;
}
memset(h,0,sizeof(h));
for (k=i;k>=0;k--)h[i-k]=a[k]+'0';
return strlen(h);
}
int main()
{
int n;
cin>>n;
if(n==0)
{
cout<<"0\n";
return 0;
}
memset(f,0,sizeof(f));
f[1][0] = '1';
f[2][0] = '1';
for(int i=3;i<=n+1;i++)
{
hhh(f[i-1],f[i-2]);
strcpy(f[i],h);
}
cout<<f[n+1]<<endl;
return 0;
}
by __世界第一弱__ @ 2018-10-10 20:26:25
by __世界第一弱__ @ 2018-10-10 20:26:42
#define 100005 5005
by _Felix @ 2018-10-10 20:26:55
@世界第一弱
那样不会MLE吗
by _Felix @ 2018-10-10 20:27:39
关键我90分(该死的5000)
by __世界第一弱__ @ 2018-10-10 20:31:48
@最亮的星—喵 5005*5005不会,而且您可以写
b=a+b,t=a,a=b,b=t;
by wenge @ 2018-10-16 21:27:53
正解之一:滚动数组